Pourquoi nouveau T-SQL de travail SQL Server 2008 sur la base de données en mode de compatibilité 80?
-
26-09-2019 - |
Question
Expérimenter avec de nouvelles fonctionnalités de T-SQL, j'ai couru dans un casse-tête. Voici une nouvelle syntaxe prise en charge par SQL 2008 et je vous attendriez à travailler sur les bases de données définies pour le mode de compatibilité 100 (à savoir 2008) et fonctionne pas pour le mode compat 80 (à savoir 2000). Pourtant, cela fonctionne pour une base de données définie pour le mode de compatibilité SQL Server 2000 sur une instance SQL 2008 Standard Edition:
use MDS -- this db is compat mode 80
go
CREATE TABLE dbo.Employees
(
Name VARCHAR(50) NULL,
Email VARCHAR(50) NULL,
Salary money NULL
)
INSERT INTO dbo.Employees(Name, Email, Salary)
VALUES('Scott', 'scott@example.com', 50000.00),
('Jisun', 'jisun@example.com', 225000.00),
('Alice', 'al@example.com', 75000.00),
('Sam', 'sam@example.com', 45000.00)
SELECT * FROM dbo.Employees
drop table dbo.Employees
La solution
Le réglage du mode de compatibilité est utilisé pour contrôler certains aspects relativement obscurs (IMHO) de databae comportement du moteur. Il ne bloque pas ou empêcher l'utilisation des extensions du langage T-SQL d'être utilisé sur les bases de données migrées à partir de versions antérieures - par exemple, une base de données sauvegardée à partir de SQL 2000 et restauré sur SQL 2008 et soutiendra CTEs le nouveau multi valeur instructions INSERT.
Les modalités détaillées de ce qui est contrôlé par le mode de compatibilité de base de données sont enterrés dans plusieurs articles dans la documentation en ligne; cette est un bon point de départ pour des recherches sur ce sujet.
Autres conseils
Je l'ai remarqué aussi, et trouvé cette déclaration sur MSDN :
Définit certains comportements de base de données à compatible avec la version spécifiée de SQL Server.
Le mode de compatibilité affecte les comportements « certains », et non pas tous les comportements. Voir documentation ALTER DATABASE pour plus de détails.
Je ne vois pas comment cela pourrait fonctionner en mode compat 80. Essayez d'ajouter cette ligne avant de créer votre table:
sp_dbcmptlevel 'MDS'
-t-il revenir 80?