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.

Icône Lien de rubriqueConventions de la syntaxe de Transact-SQL

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