Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Проблема совместимости MS SQL 2008R2 и MS SQL 2104  [new]
rmnnad
Member

Откуда:
Сообщений: 3
Есть кастомное приложение и БД на MS SQL 2008R2.
Само приложение сейчас переписать нет возможности.
В приложении используется запрос:

use HISTORY
select c.name, c.status, o.name from syscolumns c, sysobjects o where c.id = object_id ('dbo.URTO_T_GROUPS') and c.cdefault *= o.id order by colid ASC 


На сервере 2008 отрабатывает без проблем.

Если выполнять этот запрос на 2014 сервере, то запрос не отрабатывает, в окне запроса подсвечивает кусок

c.cdefault *= o.id


и выдает подсказку "В контексте, где ожидается условие, указано выражение не логического типа"

Можно ли что-то сделать в этой ситуации?
14 фев 18, 06:51    [21189590]     Ответить | Цитировать Сообщить модератору
 Re: Проблема совместимости MS SQL 2008R2 и MS SQL 2104  [new]
Guf
Member

Откуда: Новосибирск
Сообщений: 641
rmnnad,

Ничего нельзя сделать, кроме как переписать приложение. Синтаксис *= устаревший. 2008R2 последняя версия, которая его поддерживает. Начиная 2012 и выше такой синтаксис не поддерживается.
14 фев 18, 06:56    [21189594]     Ответить | Цитировать Сообщить модератору
 Re: Проблема совместимости MS SQL 2008R2 и MS SQL 2104  [new]
rmnnad
Member

Откуда:
Сообщений: 3
Спасибо. А кто-нибудь может мне темному написать этот запрос в современном изложении? Был бы очень благодарен
14 фев 18, 07:53    [21189644]     Ответить | Цитировать Сообщить модератору
 Re: Проблема совместимости MS SQL 2008R2 и MS SQL 2104  [new]
rmnnad
Member

Откуда:
Сообщений: 3
Спасибо пока ждал ответа сам сформировал... :)
14 фев 18, 08:25    [21189681]     Ответить | Цитировать Сообщить модератору
 Re: Проблема совместимости MS SQL 2008R2 и MS SQL 2104  [new]
demon2018
Guest
rmnnad,

https://msdn.microsoft.com/ru-ru/library/cc645922(v=sql.120)
14 фев 18, 10:57    [21190103]     Ответить | Цитировать Сообщить модератору
 Re: Проблема совместимости MS SQL 2008R2 и MS SQL 2104  [new]
Добрый Э - Эх
Guest
demon2018,

"Иногда лучше жевать, чем говорить"(с)


Если ты в глаза не видел и руками не трогал "до-ANSI-шные" внешние соединения, то нужно было просто пройти мимо....
14 фев 18, 11:03    [21190125]     Ответить | Цитировать Сообщить модератору
 Re: Проблема совместимости MS SQL 2008R2 и MS SQL 2104  [new]
Добрый Э - Эх
Guest
demon2018,

вот сюда сходи, может в следующий раз будешь понимать, о чем речь... :)
14 фев 18, 11:06    [21190137]     Ответить | Цитировать Сообщить модератору
 Re: Проблема совместимости MS SQL 2008R2 и MS SQL 2104  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Добрый Э - Эх,

Гоните его, насмехайтесь над ним!
14 фев 18, 11:11    [21190158]     Ответить | Цитировать Сообщить модератору
 Re: Проблема совместимости MS SQL 2008R2 и MS SQL 2104  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3235
Добрый Э - Эх
demon2018,

"Иногда лучше жевать, чем говорить"(с)


Если ты в глаза не видел и руками не трогал "до-ANSI-шные" внешние соединения, то нужно было просто пройти мимо....
Это не "до-ANSI-шные", это ANSI SQL 89 стандарт.
15 фев 18, 02:06    [21192623]     Ответить | Цитировать Сообщить модератору
 Re: Проблема совместимости MS SQL 2008R2 и MS SQL 2104  [new]
Добрый Э - Эх
Guest
Ennor Tiegael,

и ты даже ссылку на стандарт с описанием такого джойна можешь привести?
Или "у нас джентльмены верят друг другу на слово"(с)?
15 фев 18, 05:29    [21192660]     Ответить | Цитировать Сообщить модератору
 Re: Проблема совместимости MS SQL 2008R2 и MS SQL 2104  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Ennor Tiegael
Это не "до-ANSI-шные", это ANSI SQL 89 стандарт.


Добрый Э - Эх
и ты даже ссылку на стандарт с описанием такого джойна можешь привести?
Или "у нас джентльмены верят друг другу на слово"(с)?


Добрый - прав
Описания SQL JOIN 92
15 фев 18, 10:31    [21193059]     Ответить | Цитировать Сообщить модератору
 Re: Проблема совместимости MS SQL 2008R2 и MS SQL 2104  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3235
Добрый Э - Эх,

Вы правы, но примерно наполовину. Вот это
from syscolumns c, sysobjects o
- стандарт ANSI SQL 89, и никаких других соединений в нем не было.

Вот это
and c.cdefault *= o.id
- vendor-specific syntax, придуманный в Sybase, унаследованный Microsoft и в стандарт так и не попавший.

Если же придираться к буквам, то называть второй синтаксис "до-ансишным" не корректно, т.к. первым стандартом был ANSI SQL 86, выпущенный понятно в каком году, и каких-либо серьезных новшеств в 89-й версии добавлено не было. Первая же версия Sybase SQL Server (совсем первая, да) была выпущена только в 1987, и я признаться не в курсе, был там этот синтаксис, или появился позже. Из этого следует, что на момент выпуска первой версии СУБД с поддержкой данного синтаксиса внешних соединений (когда бы оно ни произошло) стандарт ANSI SQL уже существовал.

15 фев 18, 14:03    [21193870]     Ответить | Цитировать Сообщить модератору
 Re: Проблема совместимости MS SQL 2008R2 и MS SQL 2104  [new]
nvv13
Member

Откуда: Архангельск
Сообщений: 57
можно еще
compatibility level
поменять у базы
15 фев 18, 17:37    [21194739]     Ответить | Цитировать Сообщить модератору
 Re: Проблема совместимости MS SQL 2008R2 и MS SQL 2104  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
nvv13
можно еще
compatibility level
поменять у базы

на 2014 до 90? успехов
15 фев 18, 17:46    [21194759]     Ответить | Цитировать Сообщить модератору
 Re: Проблема совместимости MS SQL 2008R2 и MS SQL 2104  [new]
Добрый Э - Эх
Guest
Ennor Tiegael
Вот это
and c.cdefault *= o.id
- vendor-specific syntax, придуманный в Sybase, унаследованный Microsoft и в стандарт так и не попавший.
Вот именно!
В стандарте ANSI SQL-89 этого не было вообще, от слова "совсем".
Поэтому каждый выкручивался, как мог.
В SyBase/MS SQL Server придумали соединять таблицы через *=, в Oracle для этих же целей использовалась комбинация =+, в Informix оно записывалось наиболее близко к тому, что после вошло в ANSI SQL-92: FROM tab1, OUTER(tab2) WHERE tab1.col1 = tab2.col2
15 фев 18, 17:49    [21194770]     Ответить | Цитировать Сообщить модератору
 Re: Проблема совместимости MS SQL 2008R2 и MS SQL 2104  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
nvv13
можно еще
compatibility level
поменять у базы

у него же 2014-ый
он 80 не поддерживает.
последний, кто 80 терпел, был 2008 R2
15 фев 18, 17:50    [21194776]     Ответить | Цитировать Сообщить модератору
 Re: Проблема совместимости MS SQL 2008R2 и MS SQL 2104  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
TaPaK
nvv13
можно еще
compatibility level
поменять у базы

на 2014 до 90? успехов

90 и так не катит.
в 2005 это уже discontinued.
так что только CL 80
@@version <= SQL Server 2008 R2
15 фев 18, 17:53    [21194783]     Ответить | Цитировать Сообщить модератору
 Re: Проблема совместимости MS SQL 2008R2 и MS SQL 2104  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Yasha123,

а ну да, с 90го перестало работать :)
15 фев 18, 17:57    [21194793]     Ответить | Цитировать Сообщить модератору
 Re: Проблема совместимости MS SQL 2008R2 и MS SQL 2104  [new]
Добрый Э - Эх
Guest
чтобы быть совсем уж точным...
Добрый Э - Эх
Ennor Tiegael
Вот это
and c.cdefault *= o.id
- vendor-specific syntax, придуманный в Sybase, унаследованный Microsoft и в стандарт так и не попавший.
Вот именно!
В стандарте ANSI SQL-89 этого не было вообще, от слова "совсем".
Поэтому каждый выкручивался, как мог.
В SyBase/MS SQL Server придумали соединять таблицы через *= (в коде это выглядело бы так: FROM tab1, tab2 WHERE tab1.col1 *= tab2.col2), в Oracle для этих же целей использовалась комбинация =(+) (в коде это выглядело бы так: FROM tab1, tab2 WHERE tab1.col1 = tab2.col2(+)), в Informix оно записывалось наиболее близко к тому, что после вошло в ANSI SQL-92: FROM tab1, OUTER(tab2) WHERE tab1.col1 = tab2.col2
15 фев 18, 17:57    [21194795]     Ответить | Цитировать Сообщить модератору
 Re: Проблема совместимости MS SQL 2008R2 и MS SQL 2104  [new]
Добрый Э - Эх
Guest
Ennor Tiegael
Добрый Э - Эх,

Вы правы, но примерно наполовину. Вот это
from syscolumns c, sysobjects o
- стандарт ANSI SQL 89, и никаких других соединений в нем не было.
Заметь, в своем первоначальном сообщение я вел речь не за соединения вообще, а за их "внешнюю" разновидность:
Добрый Э - Эх
Если ты в глаза не видел и руками не трогал "до-ANSI-шные" внешние соединения, то нужно было просто пройти мимо....
15 фев 18, 18:26    [21194859]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить