Понимание уровня совместимости в SQL Server

Я понял, что установка базы данных на уровень COMPATIBILITY_LEVEL до вашего собственного не позволяет использовать функции. Однако, похоже, это не так. Засвидетельствуйте следующий сценарий SQL:

CREATE DATABASE Foo
GO
USE Foo
GO
ALTER DATABASE Foo SET COMPATIBILITY_LEVEL = 80
GO

CREATE TABLE Bar
(
    Id UNIQUEIDENTIFIER NOT NULL,
    TestNvcMax NVARCHAR (MAX) NOT NULL, -- Arrived in SQL 2005
    TestDateTime2 DATETIME2 (7) NOT NULL -- Arrived in SQL 2008
)
GO

но эта таблица создает совершенно-любые идеи? Я бы подумал, что какое-то сообщение об ошибке или предупреждение было бы уместно

3 ответов


вы можете прочитать о различиях между уровнем совместимости 80, 90 и 100. изменить уровень совместимости базы данных

по-видимому, новые типы данных не затрагиваются. Я думаю, что уровень совместимости должен заставить SQL Server "вести себя" как более старая версия, а не мешать вам делать новые причудливые вещи.


бол говорит:

уровень совместимости обеспечивает только частичная обратная совместимость с более ранние версии SQL Server.

также:

новая функция может работать под старые уровни совместимости, но параметры могут потребовать корректировки.

Я считаю, что это ваш случай.


Я понимаю, что это старый пост, но для тех, кто заканчивается здесь, как и я, больше информации всегда полезно.

возможно также, что новая совместимость не вступила в силу до запуска инструкции create table.

" новый параметр совместимости для базы данных вступает в силу, когда база данных USE выдается или Новый логин обрабатывается с этой базой данных по умолчанию база данных." (https://msdn.microsoft.com/en-us/library/bb510680.aspx)