Partager via


Niveau de compatibilité ALTER DATABASE (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.Pour obtenir des informations sur d'autres options ALTER DATABASE, consultez ALTER DATABASE (Transact-SQL).

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

S'applique à : SQL Server (SQL Server 2008 et version actuelle), Base de données Azure SQL.

Syntaxe

ALTER DATABASE database_name 
SET COMPATIBILITY_LEVEL = { 90 | 100 | 110 | 120 }

Arguments

  • database_name
    Nom de la base de données à modifier.

  • COMPATIBILITY_LEVEL {80 | 90 | 100 | 110 | 120 }
    Version de SQL Server avec laquelle la base de données doit être compatible.La valeur doit être l'une des suivantes :

    Valeur

    Description

    S'applique à

    80

    SQL Server 2000

    SQL Server 2008 jusqu'à SQL Server 2008 R2

    90

    SQL Server 2005

    SQL Server 2008 jusqu'à SQL Server 2012

    100

    SQL Server 2008 et SQL Server 2008 R2

    SQL Server 2008 jusqu'à SQL Server 2014

    110

    SQL Server 2012

    SQL Server 2012 jusqu'à SQL Server 2014

    120

    SQL Server 2014

    SQL Server 2014 jusqu'à SQL Server 2014

Notes

Pour toutes les installations de SQL Server 2014, le niveau de compatibilité par défaut est 120.Il s'agit du niveau défini pour les bases de données créées dans SQL Server 2014, à moins que le niveau de compatibilité de la base de données model soit inférieur.Lorsqu'une base de données est mise à niveau vers SQL Server 2014 à partir d'une version antérieure quelconque de SQL Server, la base de données conserve son niveau de compatibilité existant, s'il est au moins de 100.Mettre à niveau une base de données avec un niveau de compatibilité de 90 affecte à la base de données le niveau de compatibilité 100.Cela s'applique aussi bien aux bases de données système qu'aux bases de données utilisateur.Utilisez ALTER DATABASE pour modifier le niveau de compatibilité de la base de données.Pour afficher le niveau de compatibilité actuel d'une base de données, exécutez une requête sur la colonne compatibility_level de l'affichage catalogue sys.databases.

Utilisation du niveau de compatibilité pour la compatibilité descendante

Le niveau de compatibilité affecte uniquement les comportements de la base de données spécifiée et non ceux du serveur tout entier.Le niveau de compatibilité fournit uniquement une compatibilité descendante partielle avec les versions antérieures de SQL Server.Utilisez le niveau de compatibilité en tant qu'aide à la migration intérimaire pour contourner les problèmes liés aux différences de version dans les comportements qui sont contrôlés par le paramètre de niveau de compatibilité correspondant.Si des applications SQL Server existantes sont affectées par des différences de comportement dans SQL Server 2014, convertissez l'application afin qu'elle fonctionne correctement.Utilisez ensuite ALTER DATABASE pour changer le niveau de compatibilité en spécifiant 120.Le nouveau paramètre de compatibilité d'une base de données devient effectif lorsque la base de données devient ensuite active (soit comme base de données par défaut lors de la connexion, soit lorsqu'elle est spécifiée dans une instruction USE).

Meilleures pratiques

La modification du niveau de compatibilité alors que des utilisateurs sont connectés à la base de données peut générer des jeux de résultats incorrects pour les requêtes actives.Par exemple, si le niveau de compatibilité change alors qu'un plan de requête est en cours de compilation, le plan compilé peut être basé à la fois sur l'ancien niveau de compatibilité et sur le nouveau, ce qui aboutit à un plan incorrect et à des résultats éventuellement erronés.En outre, le problème peut être aggravé si le plan est placé dans la mémoire cache du plan et réutilisé pour des requêtes ultérieures.Pour éviter que les requêtes ne donnent des résultats inexacts, nous vous recommandons d'utiliser la procédure suivante pour modifier le niveau de compatibilité d'une base de données :

  1. Placez la base de données en mode d'accès mono-utilisateur en utilisant ALTER DATABASE SET SINGLE_USER.

  2. Modifiez le niveau de compatibilité de la base de données.

  3. Placez la base de données en mode d'accès multi-utilisateur en utilisant ALTER DATABASE SET MULTI_USER.

  4. Pour plus d'informations sur la définition du mode d'accès d'une base de données, consultez ALTER DATABASE (Transact-SQL).

Niveaux de compatibilité et procédures stockées

Lors de l'exécution d'une procédure stockée, elle utilise le niveau de compatibilité en cours de la base de données dans laquelle elle est définie.Lors de la modification du paramètre de compatibilité d'une base de données, l'ensemble de ses procédures stockées sont automatiquement recompilées en conséquence.

Différences entre les niveaux de compatibilité inférieurs et le niveau 120

Cette section décrit les nouveaux comportements introduits avec le niveau de compatibilité 120.

Paramètre de niveau de compatibilité inférieur ou égal à 110

Paramètre de niveau de compatibilité égal à 120

L'ancien optimiseur de requête est utilisé.

SQL Server 2014 inclut des améliorations appréciables dans le composant qui crée et optimise les plans de requête.Cette nouvelle fonctionnalité de l'optimiseur de requête dépend de l'utilisation du niveau de compatibilité 120 de la base de données.Pour bénéficier de ces améliorations, vous devez développer des applications de base de données à l'aide d'un niveau de compatibilité de base de données 120.Les applications qui sont migrées des versions antérieures de SQL Server doivent être soigneusement testées pour vérifier que de bonnes performances sont conservées ou améliorées.Si les performances se dégradent, définissez le niveau de compatibilité 110 ou inférieur de base de données pour utiliser la méthodologie de l'ancien optimiseur de requête.

Le niveau de compatibilité 120 de la base de données utilise un nouvel estimateur de cardinalité qui est réglé pour le stockage des données et les charges de travail OLTP modernes.Avant de définir le niveau de compatibilité de la base de données à 110 en raison de problèmes de performance, consultez les recommandations de la section Plans de requête de la rubrique SQL Server 2014Nouveautés (moteur de base de données).

Dans les niveaux de compatibilité inférieurs à 120, le paramètre de language est ignoré lors de la conversion d'une valeur date en valeur de chaîne.Notez que ce comportement est spécifique uniquement au type date.Par exemple, la requête suivante ignore l'instruction SET LANGUAGE sauf avec le niveau de compatibilité 120.

SET DATEFORMAT dmy; 
DECLARE @t2 date = '12/5/2011' ;
SET LANGUAGE dutch; 
SELECT CONVERT(varchar(11), @t2, 106); 
-- Results when the compatibility level is less than 120. 
12 May 2011 
-- Results when the compatibility level is set to 120).
12 mei 2011

Le paramètre de langage est pris en compte lors de la conversion d'une valeur date en valeur de chaîne.

Les références récursives dans la partie droite d'une clause EXCEPT créent une boucle infinie.L'exemple ci-dessous illustre ce comportement.

WITH 
cte AS (SELECT * FROM (VALUES (1),(2),(3)) v (a)),
r 
AS (SELECT a FROM Table1
UNION ALL
(SELECT a FROM Table1 EXCEPT SELECT a FROM r) ) 
SELECT a 
FROM r; 

Les références récursives dans une clause EXCEPT génèrent une erreur conformément à la norme SQL ANSI.

Une expression CTE récursive autorise les noms de colonnes en double.

Les expressions CTE récursives n'autorisent pas les noms de colonnes en double.

Les déclencheurs désactivés sont activés en cas de modifications.

La modification d'un déclencheur ne modifie pas son état (activé ou désactivé).

La clause de table OUTPUT INTO ignore le paramètre IDENTITY_INSERT SETTING = OFF et permet l'insertion de valeurs explicites.

Il est impossible d'insérer des valeurs explicites dans une colonne identité de table quand IDENTITY_INSERT a la valeur OFF.

Lorsque la relation contenant-contenu de base de données a la valeur partielle, la validation du champ $action dans la clause OUTPUT d'une instruction MERGE peut retourner une erreur de classement.

Le classement des valeurs retournées par la clause $action d'une instruction MERGE est le classement de la base de données à la place du classement du serveur et aucune erreur de conflit de classement n'est retournée.

Une instruction SELECT INTO crée toujours une opération d'insertion monothread.

Une instruction SELECT INTO peut créer une opération d'insertion parallèle.Lors de l'insertion d'un grand nombre de lignes, l'opération parallèle peut améliorer les performances.

Différences entre les niveaux de compatibilité inférieurs et les niveaux 110 et 120

Cette section décrit les nouveaux comportements introduits avec le niveau de compatibilité 110.Cette section s'applique également au niveau 120.

Paramètre de niveau de compatibilité inférieur ou égal à 100

Paramètre de niveau de compatibilité d'au moins 110

Les objets de base de données CLR (Common Language Runtime) sont exécutés avec la version 4 du CLR.Toutefois, quelques changements de comportement introduits dans la version 4 du CLR sont évités.Pour plus d'informations, consultez Nouveautés dans l'intégration du CLR.

Les objets de base de données CLR sont exécutés avec la version 4 du CLR.

Le XQuery active string-length et substring compte chaque caractère de substitution comme deux caractères.

Le XQuery active string-length et substring compte chaque caractère de substitution comme un seul caractère.

PIVOT est autorisé dans une requête d'expression de table commune récursive.Cependant, la requête retourne des résultats incorrects lorsqu'il existe plusieurs lignes par regroupement.

PIVOT n'est pas autorisé dans une requête d'expression de table commune récursive.Une erreur est retournée.

L'algorithme RC4 est uniquement pris en charge pour des raisons de compatibilité descendante.Le nouveau matériel ne peut être chiffré à l'aide de RC4 ou de RC4_128 que lorsque la base de données se trouve dans le niveau de compatibilité 90 ou 100.(Non recommandé.)Dans SQL Server 2012, le matériel chiffré à l'aide de RC4 ou de RC4_128 peut être déchiffré dans n'importe quel niveau de compatibilité.

Le nouveau matériel ne peut pas être chiffré à l'aide de RC4 ou RC4_128.Utilisez à la place un algorithme plus récent, tel qu'un des algorithmes AES.Dans SQL Server 2012, le matériel chiffré à l'aide de RC4 ou de RC4_128 peut être déchiffré dans n'importe quel niveau de compatibilité.

Le style par défaut pour les opérations CAST et CONVERT sur les types de données time et datetime2 est 121, sauf lorsque l'un des types est utilisé dans une expression de colonne calculée.Pour les colonnes calculées, le style par défaut est 0.Ce comportement influe sur les colonnes calculées lorsqu'elles sont créées, utilisées dans des requêtes impliquant le paramétrage automatique, ou utilisées dans des définitions de contraintes.

L'exemple suivant illustre la différence entre les styles 0 et 121.Il ne présente pas le comportement décrit ci-dessus.Pour plus d'informations sur les styles de date et d'heure, consultez CAST et CONVERT (Transact-SQL).

CREATE TABLE t1 (c1 time(7), c2 datetime2); 
INSERT t1 (c1,c2) VALUES (GETDATE(), GETDATE());
SELECT CONVERT(nvarchar(16),c1,0) AS TimeStyle0
       ,CONVERT(nvarchar(16),c1,121)AS TimeStyle121
       ,CONVERT(nvarchar(32),c2,0) AS Datetime2Style0
       ,CONVERT(nvarchar(32),c2,121)AS Datetime2Style121
FROM t1;
-- Returns values such as the following.
TimeStyle0       TimeStyle121     
Datetime2Style0      Datetime2Style121
---------------- ---------------- 
-------------------- --------------------------
3:15PM           15:15:35.8100000 
Jun  7 2011  3:15PM  2011-06-07 15:15:35.8130000

Lorsque le niveau de compatibilité est 110, le style par défaut pour les opérations CAST et CONVERT sur les types de données time et datetime2 est toujours 121.Si votre requête repose sur l'ancien comportement, utilisez un niveau de compatibilité inférieur à 110, ou spécifiez explicitement le style 0 dans la requête affectée.

La mise à niveau de la base de données vers le niveau de compatibilité 110 ne modifie pas les données utilisateur stockées sur le disque.Vous devez corriger manuellement ces données comme il convient.Par exemple, si vous avez utilisé SELECT INTO pour créer une table à partir d'une source qui contenait une expression de colonne calculée décrite ci-dessus, les données (utilisant le style 0) sont stockées à la place de la définition de colonne calculée.Vous devez mettre à jour manuellement ces données pour qu'elles correspondent au style 121.

Toutes les colonnes des tables distantes du type smalldatetime qui sont référencées dans une vue partitionnée sont mappées en datetime.Les colonnes correspondantes dans les tables locales (dans la même position ordinale de la liste de sélection) doivent être de type datetime.

Toutes les colonnes des tables distantes du type smalldatetime qui sont référencées dans une vue partitionnée sont mappées en smalldatetime.Les colonnes correspondantes dans les tables locales (dans la même position ordinale de la liste de sélection) doivent être de type smalldatetime.

Après la mise à niveau en 110, la vue partitionnée distribuée échoue en raison d'une incompatibilité de type de données.Vous pouvez résoudre ce problème en modifiant le type de données dans la table distante en datetime ou en définissant le niveau de compatibilité de la base de données locale à 100 ou moins.

La fonction SOUNDEX implémente les règles suivantes :

  1. H et W majuscules sont ignorés lors de la séparation de deux consonnes qui ont le même numéro dans le code SOUNDEX.

  2. Si les 2 premiers caractères de character_expression ont le même numéro dans le code SOUNDEX, ils sont tous les deux inclus.Sinon, si un jeu de consonnes côte à côte ont le même numéro dans le code SOUNDEX, toutes sont exclues à l'exception de la première.

La fonction SOUNDEX implémente les règles suivantes :

  1. Si un H ou W majuscule sépare deux consonnes qui ont le même numéro dans le code SOUNDEX, la consonne à droite est ignorée.

  2. Si un jeu de consonnes côte à côte ont le même numéro dans le code SOUNDEX, toutes sont exclues à l'exception de la première.

Des règles supplémentaires peuvent entraîner des disparités entre les valeurs calculées par la fonction SOUNDEX et les valeurs calculées sous des niveaux de compatibilité précédents.Après la mise à niveau vers le niveau de compatibilité 110, vous pouvez être amené à reconstruire les index, les segments de mémoire ou les contraintes CHECK qui utilisent la fonction SOUNDEX.Pour plus d'informations, consultez SOUNDEX (Transact-SQL)

Différences entre le niveau de compatibilité 90 et le niveau 100

Cette section décrit les nouveaux comportements introduits avec le niveau de compatibilité 100.

Paramètre de niveau de compatibilité égal à 90

Paramètre de niveau de compatibilité égal à 100

Possibilité d'impact

Le paramètre QUOTED_IDENTIFER est toujours défini sur ON pour les fonctions de table à instructions multiples lorsqu'elles sont créées indépendamment du paramètre de niveau de session.

Le paramètre de session QUOTED IDENTIFIER est respecté lorsque les fonctions de table à instructions multiples sont créées.

Moyenne

Lorsque vous créez ou altérez une fonction de partition, les littéraux datetime et smalldatetime dans la fonction sont évalués en supposant que US_English (Anglais États-Unis) est le paramètre de langue.

Le paramètre de langue actuel est utilisé pour évaluer les littéraux datetime et smalldatetime dans la fonction de partition.

Moyenne

La clause FOR BROWSE est autorisée (et ignorée) dans les instructions INSERT et SELECT INTO.

La clause FOR BROWSE n'est pas autorisée dans les instructions INSERT et SELECT INTO.

Moyenne

Les prédicats de texte intégral sont autorisés dans la clause OUTPUT.

Les prédicats de texte intégral ne sont pas autorisés dans la clause OUTPUT.

Faible

Les instructions CREATE FULLTEXT STOPLIST, ALTER FULLTEXT STOPLIST et DROP FULLTEXT STOPLIST ne sont pas prises en charge.La liste de mots vides système est associée automatiquement aux nouveaux index de recherche en texte intégral.

Les instructions CREATE FULLTEXT STOPLIST, ALTER FULLTEXT STOPLIST et DROP FULLTEXT STOPLIST sont prises en charge.

Faible

MERGE n'est pas appliqué comme mot clé réservé.

MERGE est un mot clé entièrement réservé.L'instruction MERGE est prise en charge sous les niveaux de compatibilité 100 et 90.

Faible

L'utilisation de l'argument <dml_table_source> de l'instruction INSERT déclenche une erreur de syntaxe.

Vous pouvez capturer les résultats d'une clause OUTPUT dans une instruction imbriquée INSERT, UPDATE, DELETE ou MERGE, puis les insérer dans une table ou une vue cible.Cette opération s'effectue en utilisant l'argument <dml_table_source> de l'instruction INSERT.

Faible

Sauf si l'option NOINDEX est spécifiée, DBCC CHECKDB ou DBCC CHECKTABLE effectue les vérifications de la cohérence physique et logique sur une seule table ou vue indexée et sur tous ses index non cluster et XML.Les index spatiaux ne sont pas pris en charge.

DBCC CHECKDB ou DBCC CHECKTABLE effectue les vérifications de cohérence physique et logique sur une seule table et sur tous ses index non cluster, sauf si l'option NOINDEX est spécifiée.Toutefois, seules des vérifications de cohérence physique sont effectuées par défaut sur les index XML, les index spatiaux et les vues indexées.

Si WITH EXTENDED_LOGICAL_CHECKS est spécifié, des vérifications logiques sont effectuées sur des vues indexées, des index XML et des index spatiaux, là où ils sont présents.Par défaut, les vérifications de cohérence physique sont effectuées avant les vérifications de cohérence logique.Si l'option NOINDEX est également spécifiée, seules les vérifications logiques sont effectuées.

Faible

Lorsqu'une clause OUTPUT est utilisée avec une instruction des langages de manipulation de données (DML) et une erreur d'exécution se produit pendant l'exécution d'instruction, la transaction complète est terminée et restaurée.

Lorsqu'une clause OUTPUT est utilisée avec une instruction DML (Data Manipulation Language) et qu'une erreur d'exécution se produit pendant l'exécution de l'instruction, le comportement est déterminé par le paramètre SET XACT_ABORT.Si SET XACT_ABORT a la valeur OFF, une erreur de l'abandon de l'instruction générée par l'instruction DML à l'aide de la clause OUTPUT met fin à l'instruction, mais l'exécution du lot continue et la transaction n'est pas restaurée.Si SET XACT_ABORT a la valeur ON, toutes les erreurs d'exécution générées par l'instruction DML à l'aide de la clause OUTPUT termineront le lot, et la transaction est restaurée.

Faible

CUBE et ROLLUP ne sont pas appliqués comme mots clé réservés.

CUBE et ROLLUP sont des mots clé réservés dans la clause GROUP BY.

Faible

La validation stricte est appliquée aux éléments du type anyType XML.

La validation libre est appliquée aux éléments du type anyType XML.Pour plus d'informations, consultez Composants génériques et validation de contenu.

Faible

Les attributs spéciaux xsi:nil et xsi:type ne peuvent pas être interrogés ou modifiés par les instructions des langages de manipulation de données.

Cela signifie que /e/@xsi:nil échoue alors que /e/@* ignore les attributs xsi:nil et xsi:type.Toutefois, /e retourne les attributs xsi:nil et xsi:type pour des raisons de cohérence avec SELECT xmlCol, même si xsi:nil = "false".

Les attributs spéciaux xsi:nil et xsi:type sont stockés comme attributs réguliers et peuvent être interrogés et modifiés.

Par exemple, l'exécution de la requête SELECT x.query('a/b/@*') retourne tous les attributs y compris xsi:nil et xsi:type. Pour exclure ces types dans la requête, remplacez @* par @*[namespace-uri(.) != "insérer uri d'espace de noms xsi" et pas (local-name(.) = "type" ou local-name(.) ="nil".

Faible

Une fonction définie par l'utilisateur qui convertit une valeur de chaîne constante XML en un type datetime SQL Server est marquée comme déterministe.

Une fonction définie par l'utilisateur qui convertit une valeur de chaîne constante XML en un type datetime SQL Server est marquée comme non déterministe.

Faible

Les types de liste et d'union XML ne sont pas pris en charge complètement.

Les types de liste et d'union sont complètement pris en charge ainsi que les fonctionnalités suivantes :

  • Union de liste

  • Union d'union

  • Liste de types atomiques

  • Liste d'union

Faible

Les options SET requises pour une méthode xQuery ne sont pas validées lorsque la méthode est contenue dans une vue ou une fonction table incluse.

Les options SET requises pour une méthode xQuery sont validées lorsque la méthode est contenue dans une vue ou une fonction table incluse.Une erreur survient si les options SET de la méthode sont définies incorrectement.

Faible

Les valeurs d'attribut XML qui contiennent des caractères de fin de ligne (retour chariot et saut de ligne) ne sont pas normalisées selon la norme XML.Autrement dit, les deux caractères sont retournés à la place d'un caractère de saut de ligne unique.

Les valeurs d'attribut XML qui contiennent des caractères de fin de ligne (retour chariot et saut de ligne) sont normalisées selon la norme XML.Autrement dit, tous les sauts de ligne dans les entités analysées externes (y compris l'entité de document) sont normalisés à l'entrée en un caractère unique #xA par la traduction de la séquence de deux caractères #xD #xA et #xD qui n'est pas suivi de #xA.

Les applications qui utilisent des attributs pour transporter des valeurs de chaîne qui contiennent des caractères de fin de ligne ne recevront pas ces caractères en retour lorsqu'ils sont soumis.Pour éviter le processus de normalisation, utilisez les entités de caractère numérique XML pour encoder tous les caractères de fin de ligne.

Faible

Les propriétés de colonne ROWGUIDCOL et IDENTITY peuvent être nommées de manière incorrecte en tant que contrainte.Par exemple, l'instruction CREATE TABLE T (C1 int CONSTRAINT MyConstraint IDENTITY) s'exécute, mais le nom de contrainte n'est pas conservé et n'est pas accessible à l'utilisateur.

Les propriétés de colonne ROWGUIDCOL et IDENTITY ne peuvent pas être nommées en tant que contrainte.L'erreur 156 est retournée.

Faible

La mise à jour des colonnes en utilisant une affectation bidirectionnelle telle que UPDATE T1 SET @v = column_name = <expression> peut produire des résultats inattendus parce que la valeur vivante de la variable peut être utilisée dans d'autres clauses telles que la clause WHERE et ON pendant l'exécution d'instruction à la place de la valeur de départ de l'instruction.Cette opération peut modifier les significations des prédicats de façon imprévisible et ligne par ligne.

Ce comportement est applicable uniquement lorsque le niveau de compatibilité est défini à 90.

La mise à jour de colonnes en utilisant une affectation bidirectionnelle produit des résultats attendus car seule la valeur de départ d'instruction de la colonne fait l'objet d'un accès pendant l'exécution de l'instruction.

Faible

L'attribution de variable est autorisée dans une instruction contenant un opérateur UNION de niveau supérieur, celle-ci produit néanmoins des résultats inattendus.Par exemple, dans les instructions suivantes, la variable locale @v reçoit la valeur de la colonne BusinessEntityID issue de l'union de deux tables.Par définition, lorsque l'instruction SELECT retourne plusieurs valeurs, la dernière valeur retournée est affectée à la variable.Dans ce cas, la dernière valeur est attribuée correctement à la variable, toutefois, le jeu de résultats de l'instruction SELECT UNION est également retourné.

ALTER DATABASE AdventureWorks2012
SET compatibility_level = 90;
GO
USE AdventureWorks2012;
GO
DECLARE @v int;
SELECT @v = BusinessEntityID FROM HumanResources.Employee
UNION ALL
SELECT @v = BusinessEntityID FROM HumanResources.EmployeeAddress;
SELECT @v;

L'attribution de variable n'est pas autorisée dans une instruction contenant un opérateur UNION de niveau supérieur.L'erreur 10734 est retournée.

Pour résoudre l'erreur, réécrivez la requête, comme dans l'exemple suivant.

DECLARE @v int;
SELECT @v = BusinessEntityID FROM 
    (SELECT BusinessEntityID FROM HumanResources.Employee
     UNION ALL
     SELECT BusinessEntityID FROM HumanResources.EmployeeAddress) AS Test;
SELECT @v;

Faible

La fonction ODBC {fn CONVERT()} utilise le format de date par défaut de la langue.Pour certaines langues, le format par défaut est YDM, ce qui peut provoquer des erreurs de conversion lorsque CONVERT() est associé à d'autres fonctions, telles que {fn CURDATE ()}, qui attendent un format YMD.

La fonction ODBC {fn CONVERT()} utilise le style 121 (format YMD indépendant de la langue) lors de la conversion aux types de données ODBC SQL_TIMESTAMP, SQL_DATE, SQL_TIME, SQLDATE, SQL_TYPE_TIME et SQL_TYPE_TIMESTAMP.

Faible

La fonction ODBC {fn CURDATE()} retourne uniquement la date au format 'YYYY-MM-DD'.

La fonction ODBC {fn CURDATE ()} retourne la date et l'heure à la fois, par exemple 'YYYY-MM-DD hh:mm:ss.

Faible

Les intrinsèques datetime tels que DATEPART ne requièrent pas que les valeurs d'entrée de chaîne soient des littéraux datetime valides.Par exemple, SELECT DATEPART (année, '2007/05-30') compile correctement.

Les intrinsèques datetime tels que DATEPART requièrent que les valeurs d'entrée de chaîne soient des littéraux datetime valides.L'erreur 241 est retournée lorsqu'un littéral datetime non valide est utilisé.

Faible

Mots clés réservés

Le paramètre de compatibilité détermine aussi les mots clés réservés par le Moteur de base de données.Le tableau suivant illustre les mots clés réservés introduits par chacun des niveaux de compatibilité.

Paramètre de niveau de compatibilité

Mots clés réservés

120

Aucun.

110

WITHIN GROUP, TRY_CONVERT, SEMANTICKEYPHRASETABLE, SEMANTICSIMILARITYDETAILSTABLE, SEMANTICSIMILARITYTABLE

100

CUBE, MERGE, ROLLUP

90

EXTERNAL, PIVOT, UNPIVOT, REVERT, TABLESAMPLE

À un niveau de compatibilité spécifique, les mots clés réservés incluent l'ensemble des mots clés introduits à partir de ce niveau ou sous celui-ci.Ainsi, pour les applications au niveau 110, par exemple, l'ensemble des mots clés répertoriés dans le tableau précédent sont réservés.À des niveaux de compatibilité inférieurs, les mots clés de niveau 100 demeurent des noms d'objet valides, mais les fonctions de langage de niveau 110 correspondant à ces mots clés sont indisponibles.

Une fois introduit, un mot clé demeure réservé.Le mot clé réservé PIVOT, par exemple, introduit au niveau de compatibilité 90, est également réservé aux niveaux 100 et 110 et 120.

Si une application utilise un identificateur réservé en tant que mot clé pour son niveau de compatibilité, l'application échoue.Pour contourner ce problème, placez l'identificateur entre crochets []) ou entre guillemets ("") ; par exemple, pour effectuer la mise à niveau d'une application utilisant l'identificateur EXTERNAL au niveau de compatibilité 90, vous pouvez modifier l'identificateur de la manière suivante : [EXTERNAL] ou "EXTERNAL"".

Pour plus d'informations, consultez Mots clés réservés (Transact-SQL).

Autorisations

Nécessite l'autorisation ALTER sur la base de données.

Exemples

A.Modification du niveau de compatibilité

L'exemple suivant remplace le niveau de compatibilité de la base de données AdventureWorks2012 par 110,SQL Server 2012.

ALTER DATABASE AdventureWorks2012
SET COMPATIBILITY_LEVEL = 110;
GO

Voir aussi

ALTER DATABASE (Transact-SQL)
Mots clés réservés (Transact-SQL)
CREATE DATABASE (SQL Server Transact-SQL)
DATABASEPROPERTYEX (Transact-SQL)
sys.databases (Transact-SQL)
sys.database_files (Transact-SQL)