Comprendre COMPATIBILITY_LEVEL dans SQL Server

J'ai compris que définir une database à un COMPATIBILITY_LEVEL avant votre natif empêchait l'utilisation des fonctionnalités. Cependant, cela ne semble pas être le cas. Témoin le script SQL suivant:

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 

Mais cette table crée parfaitement – des idées? J'aurais pensé qu'une sorte de message d'erreur ou d'avertissement aurait été approprié

Vous pouvez lire ici les différences entre les niveaux de compatibilité 80, 90 et 100. ALTER DATABASE Compatibility Level

Apparemment, les nouveaux types de données ne sont pas affectés. Je pense que le niveau de compatibilité est là pour que SQL Server "se comporte" comme l'ancienne version, ne vous empêche pas de faire de nouvelles choses fantaisistes.

BOL dit:

Le niveau de compatibilité n'offre qu'une compatibilité descendante partielle avec les versions antérieures de SQL Server.

Aussi:

Les nouvelles fonctionnalités peuvent fonctionner sous des niveaux de compatibilité plus anciens, mais les options SET peuvent nécessiter des ajustements.

Je crois que c'est votre cas.

Je comprends que c'est un vieux message, mais pour quelqu'un d'autre qui se retrouve ici comme je l'ai fait, plus d'informations sont toujours utiles.

Il se peut également que la nouvelle compatibilité ne soit pas effective avant l'exécution de l'instruction create table.

"Le nouveau paramètre de compatibilité pour une database prend effet lorsqu'une database USE est émise ou qu'une nouvelle connection est traitée avec cette database comme database par défaut." ( https://msdn.microsoft.com/en-us/library/bb510680.aspx )