Вопрос

Я перемещаю приложение с SQL Server 2008 до SQL Server 2012 Express, и все хорошо, но несколько сохраненных процедур говорят, что у меня есть ошибка синтаксии.Я посмотрел онлайн и не нашел ответа - есть ли типы синтаксиса, которые поддерживаются в SQL Server 2008 (Standard), но не в SQL Server 2012 Express?

Это было полезно?

Решение

Я думаю, что есть одна возможность, если в 2008 году вы использовали режим совместимости 2000 года, и ваши хранимые процедуры имели внешние присоединения старого стиля:

SELECT o.name, c.name
FROM sys.objects AS o, sys.columns AS c
WHERE o.[object_id] *= c.[object_id];
.

Этот синтаксис работает в SQL Server 2000, но с тех пор был обесценен. В 2005, 2008 и 2008 гг. R2 вы можете использовать его, если вы используете 80 режим совместимости. Поскольку SQL Server 2012 вы больше не можете использовать 80 режим Compat, поэтому вышеуказанный код будет выполнен с:

MSG 102, Уровень 15, Состояние 1, Линия 3
Неверный синтаксис рядом '*='.

В 2008 году вы получите это сообщение об ошибке вместо этого:

MSG 4147, Уровень 15, Состояние 1, Линия 3
Запрос использует внешнее соединение Nonsi Операторы ("*=" or "=*"). Чтобы запустить этот запрос без модификации, Пожалуйста, установите уровень совместимости для текущей базы данных до 80, используя Набор Compatibility_level опция ALTER базы данных. Это сильно Рекомендуется переписать запрос с использованием операторов внешних объединений ANSI (осталось Внешнее соединение, правое внешнее соединение). В будущих версиях SQL Server, Операторы Non-Ansi Join не будут поддерживаться даже в Режимы обратной совместимости.

Но если вы измените базу данных, как указано в сообщении об ошибке, он будет работать:

ALTER DATABASE foo SET COMPATIBILITY_LEVEL = 80;
.

Это похоже на растяжку. Но без какой-либо реальной информации это об единственном угадании у меня есть.

Другие советы

Вот a Список из устаренных функций в SQL Server 2012-Посмотрите на раздел T-SQL в частности.Вы также можете использовать SSDT (инструменты данных SQL Server), создайте автономную копию вашей БД, а затем установите версию, ориентируясь на SQL Server 2012 - вывод будет отображаться, покажет многие несовместимости синтаксиса между версиями.Я написал блог о SSDT, который может быть полезным здесь .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top