Понимание COMPATIBILITY_LEVEL в SQL Server - PullRequest
9 голосов
/ 11 апреля 2011

Я понял, что установка базы данных на 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 ]

8 голосов
/ 11 апреля 2011

BOL говорит:

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

Также:

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

Я полагаю, это ваше дело.

8 голосов
/ 11 апреля 2011

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

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

3 голосов
/ 26 июля 2016

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

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

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

...