Переход от SQL Server 2008 - SQL Server 2012 Express
-
12-12-2019 - |
Вопрос
Я перемещаю приложение с 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, который может быть полезным здесь .