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
Était-ce utile?

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?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top