sp_dbcmptlevel (Transact-SQL)
Définit certains comportements de base de données pour qu'ils soient compatibles avec la version de SQL Server spécifiée.
Important
Cette fonctionnalité sera supprimée dans une prochaine version de Microsoft SQL Server. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement, et modifiez dès que possible les applications qui utilisent actuellement cette fonctionnalité. Utilisez à la place Niveau de compatibilité ALTER DATABASE.
Syntaxe
sp_dbcmptlevel [ [ @dbname = ] name ]
[ , [ @new_cmptlevel = ] version ]
Arguments
[ @dbname= ] name
Nom de la base de données dont le niveau de compatibilité doit être modifié. Les noms de base de données doivent être conformes aux règles relatives aux identificateurs. name est de type sysname et sa valeur par défaut est NULL.[ @new_cmptlevel= ] version
Version de SQL Server avec laquelle la base de données doit être compatible. version est de type tinyint et sa valeur par défaut est NULL. La valeur doit être l'une des suivantes :80 = SQL Server 2000
90 = SQL Server 2005
100 = SQL Server 2008
Valeurs du code de retour
0 (succès) ou 1 (échec)
Jeux de résultats
Si aucun paramètre n'est spécifié ou si le paramètre name n'est pas spécifié, sp_dbcmptlevel renvoie une erreur.
Si name est spécifié sans version, le Moteur de base de données retourne un message affichant le niveau de compatibilité actuel de la base de données spécifiée.
Notes
Pour obtenir une description des niveaux de compatibilité, consultez Niveau de compatibilité ALTER DATABASE (Transact-SQL).
Autorisations
Seuls le propriétaire de la base de données, les membres du rôle de serveur fixe sysadmin et du rôle de base de données fixe db_owner (si vous modifiez la base de données en cours) peuvent exécuter cette procédure.
Exemples
A. Modification du niveau de compatibilité par SQL Server 2000
L'exemple suivant modifie le niveau de compatibilité de la base de données AdventureWorks par 80.
EXEC sp_dbcmptlevel AdventureWorks, 80;
GO
B. Effet du niveau de compatibilité sur ORDER BY (scénario 1)
L'exemple suivant illustre la différence dans la liaison ORDER BY pour les niveaux de compatibilité 80 et 90. Cet exemple crée un exemple de table, SampleTable, dans la base de données tempdb.
USE tempdb;
CREATE TABLE SampleTable(c1 int, c2 int);
GO
Dans le niveau de compatibilité 90, celui par défaut, l'instruction SELECT... ORDER BY suivante produit une erreur car le nom de la colonne dans la clause AS, c1, est ambigu.
SELECT c1, c2 AS c1
FROM SampleTable
ORDER BY c1;
GO
Après la redéfinition de la base de données avec le niveau de compatibilité 80, la même instruction SELECT... ORDER BY réussit.
sp_dbcmptlevel tempdb, 80
SELECT c1, c2 AS c1
FROM SampleTable
ORDER BY c1;
GO
L'instruction SELECT... ORDER BY suivante fonctionne avec les deux niveaux de compatibilité.
sp_dbcmptlevel tempdb, 80
SELECT c1, c2 AS c3
FROM SampleTable
ORDER BY c1;
GO
sp_dbcmptlevel tempdb, 90
SELECT c1, c2 AS c3
FROM SampleTable
ORDER BY c1;
GO
C. Effet du niveau de compatibilité sur ORDER BY (scénario 2)
Dans le niveau de compatibilité 90, celui par défaut, l'instruction SELECT...ORDER BY suivante produit une erreur car il existe un préfixe de table supplémentaire dans la clause ORDER BY.
SELECT c1 AS x
FROM SampleTable
ORDER BY SampleTable.x;
GO
Après la redéfinition de la base de données avec le niveau de compatibilité 80, la même instruction SELECT...ORDER BY réussit.
sp_dbcmptlevel tempdb, 80
SELECT c1 AS x
FROM SampleTable
ORDER BY SampleTable.x;
GO
L'instruction SELECT...ORDER BY suivante fonctionne avec les deux niveaux de compatibilité.
sp_dbcmptlevel tempdb, 80
SELECT c1 AS x
FROM SampleTable
ORDER BY x;
GO
sp_dbcmptlevel tempdb, 90
SELECT c1 AS x
FROM SampleTable
ORDER BY x;
GO