MODIFIER le niveau de compatibilité de base de données (Transact-SQL)ALTER DATABASE (Transact-SQL) Compatibility Level

CETTE RUBRIQUE S’APPLIQUE À :ouiSQL Server (à partir de la version 2008)ouiAzure SQL DatabasenonAzure SQL Data Warehouse nonParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Définit certains comportements de base de données pour qu'ils soient compatibles avec la version de SQL ServerSQL Server spécifiée.Sets certain database behaviors to be compatible with the specified version of SQL ServerSQL Server. Pour les autres options ALTER DATABASE, consultez ALTER DATABASE ( Transact-SQL ) .For other ALTER DATABASE options, see ALTER DATABASE (Transact-SQL).

Icône de lien de rubrique Conventions de la syntaxe Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SyntaxeSyntax

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

ArgumentsArguments

database_namedatabase_name
Nom de la base de données à modifier.Is the name of the database to be modified.

COMPATIBILITY_LEVEL {140 | 130 | 120 | 110 | 100 | 90 | 80}COMPATIBILITY_LEVEL { 140 | 130 | 120 | 110 | 100 | 90 | 80 }
Version de SQL ServerSQL Server avec laquelle la base de données doit être compatible.Is the version of SQL ServerSQL Server with which the database is to be made compatible. Les valeurs de niveau de compatibilité suivants peuvent être configurés :The following compatibility level values can be configured:

ProductProduct Version du moteur de base de donnéesDatabase Engine Version Désignation de niveau de compatibilitéCompatibility Level Designation Prise en charge des valeurs de niveau de compatibilitéSupported Compatibility Level Values
SQL Server 2017SQL Server 2017 1414 140140 140, 130, 120, 110, 100140, 130, 120, 110, 100
Azure SQL DatabaseAzure SQL Database 1212 130130 140, 130, 120, 110, 100140, 130, 120, 110, 100
SQL Server 2016SQL Server 2016 1313 130130 130, 120, 110, 100130, 120, 110, 100
SQL Server 2014SQL Server 2014 1212 120120 120, 110, 100120, 110, 100
SQL Server 2012SQL Server 2012 1111 110110 110, 100, 90110, 100, 90
SQL Server 2008 R2SQL Server 2008 R2 10.510.5 100100 100, 90, 80100, 90, 80
SQL Server 2008SQL Server 2008 1010 100100 100, 90, 80100, 90, 80
SQL Server 2005SQL Server 2005 99 9090 90, 8090, 80
SQL Server 2000SQL Server 2000 88 8080 8080

Note

Base de données SQL Azure V12 a été publiée en décembre 2014.Azure SQL Database V12 was released in December 2014. Un aspect de cette version était que les bases de données nouvellement créées sont leur niveau de compatibilité à 120.One aspect of that release was that newly created databases had their compatibility level set to 120. Base de données SQL 2015 compter prise en charge pour le niveau 130, bien que la valeur par défaut est restée à 120.In 2015 SQL Database began support for level 130, although the default remained 120.

À compter de mid-juin 2016, dans la base de données SQL Azure, le niveau de compatibilité par défaut sont 130 au lieu de 120 pour nouvellement créé bases de données.Starting in mid-June 2016, in Azure SQL Database, the default compatibility level are 130 instead of 120 for newly created databases. Bases de données existants créés avant mid-juin 2016 ne sont pas affectés et à maintenir leur niveau de compatibilité actuel (100, 110 et 120).Existing databases created before mid-June 2016 are not affected, and maintain their current compatibility level (100, 110, or 120).

Si vous souhaitez que le niveau de 130 pour votre base de données en général, mais vous avez des raisons de préférer le niveau 110 estimation de cardinalité algorithme, consultez ALTER DATABASE SCOPED CONFIGURATION ( Transact-SQL ) et notamment son mot clé LEGACY_CARDINALITY_ESTIMATION = ON.If you want level 130 for your database generally, but you have reason to prefer the level 110 cardinality estimation algorithm, see ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL), and in particular its keyword LEGACY_CARDINALITY_ESTIMATION =ON.

Pour plus d’informations sur la façon d’évaluer les différences de performances de vos requêtes importantes, entre deux niveaux de compatibilité sur la base de données SQL Azure, consultez amélioré les performances de requête avec 130 de niveau de compatibilité de base de données SQL Azure.For details about how to assess the performance differences of your most important queries, between two compatibility levels on Azure SQL Database, see Improved Query Performance with Compatibility Level 130 in Azure SQL Database.

Exécutez la requête suivante pour déterminer la version de le Moteur de base de donnéesDatabase Engine que vous êtes connecté.Execute the following query to determine the version of the Moteur de base de donnéesDatabase Engine that you are connected to.

SELECT SERVERPROPERTY('ProductVersion');  

Note

Pas toutes les fonctionnalités qui varient selon le niveau de compatibilité sont pris en charge sur Base de données SQLSQL Database.Not all features that vary by compatibility level are supported on Base de données SQLSQL Database.

Pour déterminer le niveau de compatibilité actuel, interrogez la compatibility_level colonne sys.databases ( Transact-SQL ) .To determine the current compatibility level, query the compatibility_level column of sys.databases (Transact-SQL).

SELECT name, compatibility_level FROM sys.databases;  

Notes Remarks

Pour toutes les installations de SQL ServerSQL Server, le niveau de compatibilité par défaut est défini à la version de la Moteur de base de donnéesDatabase Engine.For all installations of SQL ServerSQL Server, the default compatibility level is set to the version of the Moteur de base de donnéesDatabase Engine. Bases de données sont définies à ce niveau, sauf si le modèle base de données a un niveau de compatibilité inférieur.Databases are set to this level unless the model database has a lower compatibility level. Lorsqu’une base de données est mise à niveau depuis une version antérieure de SQL ServerSQL Server, la base de données conserve son niveau de compatibilité existant s’il est au moins minimale autorisée pour cette instance de SQL ServerSQL Server.When a database is upgraded from any earlier version of SQL ServerSQL Server, the database retains its existing compatibility level if it is at least minimum allowed for that instance of SQL ServerSQL Server. La mise à niveau une base de données avec un niveau de compatibilité inférieur au niveau autorisé, définit la base de données de compatibilité le plus bas niveau autorisé.Upgrading a database with a compatibility level lower than the allowed level, sets the database to the lowest compatibility level allowed. Cela s'applique aussi bien aux bases de données système qu'aux bases de données utilisateur.This applies to both system and user databases. Utilisez ALTER DATABASE pour modifier le niveau de compatibilité de la base de données.Use ALTER DATABASE to change the compatibility level of the database. Pour afficher le niveau de compatibilité actuel d’une base de données, interrogez la compatibility_level colonne dans la sys.databases vue de catalogue.To view the current compatibility level of a database, query the compatibility_level column in the sys.databases catalog view.

Utilisation du niveau de compatibilité pour la compatibilité descendanteUsing Compatibility Level for Backward Compatibility

Le niveau de compatibilité affecte uniquement les comportements de la base de données spécifiée et non ceux du serveur tout entier.Compatibility level affects behaviors only for the specified database, not for the entire server. Le niveau de compatibilité fournit uniquement une compatibilité descendante partielle avec les versions antérieures de SQL ServerSQL Server.Compatibility level provides only partial backward compatibility with earlier versions of SQL ServerSQL Server. À partir de mode de compatibilité 130, toutes les nouvelles requêtes plan affectant fonctionnalités ont été ajoutées uniquement pour le nouveau mode de compatibilité.Starting with compatibility mode 130, any new query plan affecting features have been added only to the new compatibility mode. Cela a été effectué afin de réduire le risque au cours des mises à niveau qui résultent d’une dégradation des performances en raison de changements de plan de requête.This has been done in order to minimize the risk during upgrades that arise from performance degradation due to query plan changes. Du point de vue de l’application, l’objectif est toujours être au niveau de compatibilité plus récente pour pouvoir hériter parmi les nouvelles fonctionnalités ainsi que des améliorations de performances dans l’espace d’optimiseur de requête, mais à le faire de manière contrôlée.From an application perspective, the goal is still to be at the latest compatibility level in order to inherit some of the new features as well as performance improvements done in the Query optimizer space but to do so in a controlled way. 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.Use compatibility level as an interim migration aid to work around version differences in the behaviors that are controlled by the relevant compatibility-level setting. Pour plus d’informations, consultez les meilleures pratiques plus loin dans l’article de la mise à niveau.For more details see the Upgrade best practices later in the article.

Si existant SQL ServerSQL Server applications sont affectées par les différences de comportement dans la version de SQL ServerSQL Server, convertir en application fonctionnent de façon transparente avec le nouveau mode de compatibilité.If existing SQL ServerSQL Server applications are affected by behavioral differences in your version of SQL ServerSQL Server, convert the application to work seamlessly with the new compatibility mode. Utilisez ensuite ALTER DATABASE pour modifier le niveau de compatibilité à 130.Then use ALTER DATABASE to change the compatibility level to 130. Le nouveau paramètre de compatibilité pour une base de données prend effet quand un USE Database émis ou une nouvelle connexion est traitée avec cette base de données en tant que la base de données par défaut.The new compatibility setting for a database takes effect when a USE Database is issued or a new login is processed with that database as the default database.

Bonnes pratiquesBest Practices

Pour le flux de travail recommandé pour le niveau de compatibilité de la mise à niveau, consultez modifier le Mode de compatibilité de base de données et utiliser le magasin de requêtes.For the recommended workflow for upgrading the compatibility level, see Change the Database Compatibility Mode and Use the Query Store.

Niveaux de compatibilité et procédures stockéesCompatibility Levels and Stored Procedures

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.When a stored procedure executes, it uses the current compatibility level of the database in which it is defined. 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.When the compatibility setting of a database is changed, all of its stored procedures are automatically recompiled accordingly.

Différences entre le niveau de compatibilité 130 et niveau 140Differences Between Compatibility Level 130 and Level 140

Cette section décrit les nouveaux comportements introduits avec le niveau de compatibilité 140.This section describes new behaviors introduced with compatibility level 140.

Paramètre de niveau de compatibilité inférieur ou égal à 130Compatibility-level setting of 130 or lower Paramètre de niveau de compatibilité de 140Compatibility-level setting of 140
Estimations de cardinalité pour les instructions faisant référence à des tables de plusieurs instructions fonctions utilisent une estimation de ligne fixe.Cardinality estimates for statements referencing multi-statement table valued functions use a fixed row guess. Estimations de cardinalité pour les instructions éligibles faisant référence à des tables de plusieurs instructions fonctions utilisera la cardinalité réelle de la sortie de fonction.Cardinality estimates for eligible statements referencing multi-statement table valued functions will use the actual cardinality of the function output. Cette option est activée entrelacées de l’exécution pour les fonctions table à instructions multiples.This is enabled via interleaved execution for multi-statement table valued functions.
Les requêtes en mode batch qui demandent une mémoire insuffisante accorder des tailles de résultats dans les vidages sur le disque peut continuer à avoir des problèmes sur les exécutions consécutives.Batch-mode queries that request insufficient memory grant sizes that result in spills to disk may continue to have issues on consecutive executions. Requêtes en mode batch qui demandent des tailles de grant insuffisance de mémoire que le résultat dans les vidages sur le disque peut amélioré les performances sur des exécutions consécutives.Batch-mode queries that request insufficient memory grant sizes that result in spills to disk may have improved performance on consecutive executions. Cette option est activée des commentaires d’allocation de mémoire de mode de traitement par lots qui met à jour de la taille d’allocation de mémoire d’un plan de mise en cache si les vidages se sont produites pour les opérateurs en mode batch.This is enabled via batch mode memory grant feedback which will update the memory grant size of a cached plan if spills have occurred for batch mode operators.
Taille qui entraîne des problèmes d’accès concurrentiel peut continuer à avoir des problèmes sur des exécutions consécutives d’allocation de requêtes en mode batch qui demandent une mémoire excessive.Batch-mode queries that request an excessive memory grant size that results in concurrency issues may continue to have issues on consecutive executions. Les requêtes en mode batch qui demandent une mémoire en excès accorder taille entraîne des problèmes d’accès concurrentiel peut ont amélioré la concurrence sur les exécutions consécutives.Batch-mode queries that request an excessive memory grant size that results in concurrency issues may have improved concurrency on consecutive executions. Cette option est activée des commentaires d’allocation de mémoire de mode de traitement par lots qui met à jour de la taille d’allocation de mémoire d’un plan de mise en cache si une quantité excessive a été demandée à l’origine.This is enabled via batch mode memory grant feedback which will update the memory grant size of a cached plan if an excessive amount was originally requested.
Les requêtes en mode batch qui contiennent des opérateurs de jointure sont éligibles pour trois algorithmes de jointures physiques, notamment des boucles imbriquées, de jointure de hachage et de jointure de fusion.Batch-mode queries that contain join operators are eligible for three physical join algorithms, including nested loop, hash join and merge join. Si les estimations de cardinalité sont incorrectes pour les entrées de jointure, un algorithme de jointure inapproprié peut être sélectionné.If cardinality estimates are incorrect for join inputs, an inappropriate join algorithm may be selected. Si cela se produit, performances seront affectées et l’algorithme de jointure inapproprié reste en cours d’utilisation jusqu'à ce que le plan mis en cache est recompilé.If this occurs, performance will suffer and the inappropriate join algorithm will remain in-use until the cached plan is recompiled. Il existe un opérateur de jointure supplémentaire appelé jointure adaptive.There is an additional join operator called adaptive join. Si les estimations de cardinalité sont incorrectes pour l’entrée de jointure de génération externe, un algorithme de jointure inapproprié peut être sélectionné.If cardinality estimates are incorrect for the outer build join input, an inappropriate join algorithm may be selected. Si cela se produit et l’instruction est éligible pour une jointure adaptive, une boucle imbriquée sera utilisée pour les entrées de jointure plus petites et sera utilisée pour les entrées de jointure supérieure une jointure de hachage dynamiquement sans nécessiter de recompilation.If this occurs and the statement is eligible for an adaptive join, a nested loop will be used for smaller join inputs and a hash join will be used for larger join inputs dynamically without requiring recompilation.
Plans triviales faisant référence à des index Columnstore ne sont pas éligibles pour une exécution en mode batch.Trivial plans referencing Columnstore indexes are not eligible for batch mode execution. Un plan trivial faisant référence à des index Columnstore est ignoré en faveur d’un plan éligible pour une exécution en mode batch.A trivial plan referencing Columnstore indexes will be discarded in favor of a plan that is eligible for batch mode execution.
L’opérateur UDX sp_execute_external_script peut s’exécuter uniquement en mode ligne.The sp_execute_external_script UDX operator can only run in row mode. L’opérateur UDX sp_execute_external_script est éligible pour une exécution en mode batch.The sp_execute_external_script UDX operator is eligible for batch mode execution.
Fonction table à instructions multiples n’ont pas l’exécution entrelacéeMulti-statement TVF's do not have interleaved execution Exécution entrelacée de multi-instruction améliorer la qualité du plan.Interleaved execution for multi-statement TVFs to improve plan quality .

Les correctifs qui étaient sous l’indicateur de trace 4199 dans les versions antérieures de SQL Server antérieure à SQL Server 2017 sont maintenant activés par défaut.Fixes that were under trace flag 4199 in earlier versions of SQL Server prior to SQL Server 2017 are now enabled by default. Avec le mode de compatibilité 140.With compatibility mode 140. Indicateur de trace 4199 sera toujours applicable pour les nouveaux correctifs d’optimiseur de requête sont libérés après SQL Server 2017.Trace flag 4199 will still be applicable for new query optimizer fixes that are released after SQL Server 2017. Pour plus d’informations sur l’indicateur de Trace 4199, consultez indicateur de Trace 4199.For information about Trace Flag 4199, see Trace Flag 4199.

Différences entre le niveau de compatibilité 120 et 130 de niveauDifferences Between Compatibility Level 120 and Level 130

Cette section décrit les nouveaux comportements introduits avec le niveau de compatibilité 130.This section describes new behaviors introduced with compatibility level 130.

Paramètre de niveau de compatibilité inférieur ou égal à 120Compatibility-level setting of 120 or lower Paramètre de niveau de compatibilité de 130Compatibility-level setting of 130
L’insertion dans une instruction Insert select est monothread.The Insert in an Insert-select statement is single-threaded. L’insertion dans une instruction Insert select est multithread, ou peut avoir un plan parallèle.The Insert in an Insert-select statement is multi-threaded or can have a parallel plan.
Les requêtes sur une table optimisée en mémoire s’exécutent monothread.Queries on a memory-optimized table execute single-threaded. Les requêtes sur une table mémoire optimisée peuvent avoir maintenant des plans parallèles.Queries on a memory-optimized table can now have parallel plans.
A introduit l’estimateur de cardinalité de 2014 SQL CardinalityEstimationModelVersion = « 120 »Introduced the SQL 2014 Cardinality estimator CardinalityEstimationModelVersion="120" Planifier des améliorations d’estimation avec le 130 de modèle d’Estimation de la cardinalité qui est visible à partir d’une requête supplémentaire cardinalité.Further cardinality estimation ( CE) Improvements with the Cardinality Estimation Model 130 which is visible from a Query plan. CardinalityEstimationModelVersion = « 130 »CardinalityEstimationModelVersion="130"
Mode de traitement par lots ou en Mode ligne les modifications avec index ColumnstoreBatch mode versus Row Mode changes with Columnstore indexes

Effectue un tri sur une table avec un index Columnstore est en mode ligneSorts on a table with Columnstore index are in Row mode

Agrégats de fonction de fenêtrage fonctionnent en mode de ligne telles que le retard ou responsableWindowing function aggregates operate in row mode such as LAG or LEAD

Requêtes sur les tables Columnstore avec plusieurs clauses distincts exploitées en mode ligneQueries on Columnstore tables with Multiple distinct clauses operated in Row mode

Requêtes s’exécutant sous MAXDOP 1 ou avec un plan en série exécutée en mode ligneQueries running under MAXDOP 1 or with a serial plan executed in Row mode
Mode de traitement par lots ou en Mode ligne les modifications avec index ColumnstoreBatch mode versus Row Mode changes with Columnstore indexes

Effectue un tri sur une table avec un index Columnstore est maintenant en mode batchSorts on a table with a Columnstore index are now in batch mode

Agrégats de fenêtrage fonctionnent désormais en mode batch telles que le retard ou responsableWindowing aggregates now operate in batch mode such as LAG or LEAD

Les requêtes sur les tables Columnstore avec plusieurs clauses distinctes fonctionnent en mode BatchQueries on Columnstore tables with Multiple distinct clauses operate in Batch mode

Requêtes en cours d’exécution sous Maxdop1 ou avec un plan en série s’exécutent en Mode BatchQueries running under Maxdop1 or with a serial plan execute in Batch Mode
Les statistiques peuvent être automatiquement mis à jour.Statistics can be automatically updated. La logique qui met automatiquement à jour des statistiques est plus agressive sur des tables volumineuses.The logic which automatically updates statistics is more aggressive on large tables. Dans la pratique, cela doit réduire les cas où les clients ont bénéficié des problèmes de performances sur les requêtes où les lignes nouvellement insérées sont interrogés fréquemment, mais où les statistiques n'avaient pas été mis à jour pour inclure les valeurs.In practice, this should reduce cases where customers have seen performance issues on queries where newly inserted rows are queried frequently but where the statistics had not been updated to include those values.
Trace 2371 est désactivé par défaut dans SQL Server 2014SQL Server 2014.Trace 2371 is OFF by default in SQL Server 2014SQL Server 2014. Trace 2371 est activé par défaut dans SQL Server 2016SQL Server 2016.Trace 2371 is ON by default in SQL Server 2016SQL Server 2016. Indicateur de trace 2371 indique à la mise à jour des statistiques automatiques à échantillonner un sous-ensemble plus petit encore plus sage de lignes, dans une table qui comporte un grand nombre de lignes.Trace flag 2371 tells the auto statistics updater to sample a smaller yet wiser subset of rows, in a table that has a great many rows.

Une amélioration consiste à inclure, dans l’exemple, plusieurs lignes qui ont été insérées récemment.One improvement is to include in the sample more rows that were inserted recently.

Une autre amélioration consiste à laisser les requêtes à exécuter pendant le processus de mise à jour des statistiques est en cours d’exécution, plutôt que la requête de blocage.Another improvement is to let queries run while the update statistics process is running, rather than blocking the query.
Pour le niveau 120, les statistiques sont échantillonnées par un unique-thread de processus.For level 120, statistics are sampled by a single-threaded process. Pour le niveau 130, les statistiques sont échantillonnées par un multi-thread de processus.For level 130, statistics are sampled by a multi-threaded process.
les clés étrangères entrantes 253 est la limite.253 incoming foreign keys is the limit. Une table donnée peut être référencée par des clés étrangères entrantes jusqu'à 10 000 ou références similaire.A given table can be referenced by up to 10,000 incoming foreign keys or similar references. Pour connaître les restrictions associées, consultez Create Foreign Key Relationships.For restrictions, see Create Foreign Key Relationships.
Les algorithmes de hachage MD2, MD4, MD5, SHA et SHA1 déconseillées sont autorisés.The deprecated MD2, MD4, MD5, SHA, and SHA1 hash algorithms are permitted. Les algorithmes de hachage SHA2_256 et SHA2_512 uniquement sont autorisés.Only SHA2_256 and SHA2_512 hash algorithms are permitted.
SQL Server 2016SQL Server 2016inclut des améliorations dans certaines conversions de types de données et certaines opérations (principalement rares). includes improvements in some data types conversions and some (mostly uncommon) operations. Pour plus d’informations, consultez améliorations de SQL Server 2016 de gestion de certains types de données et les opérations peu courantes.For details see SQL Server 2016 improvements in handling some data types and uncommon operations.

Indicateur de correctifs qui étaient inclus dans la trace 4199 dans les versions antérieures de SQL ServerSQL Server antérieures à SQL Server 2016SQL Server 2016 sont maintenant activés par défaut.Fixes that were under trace flag 4199 in earlier versions of SQL ServerSQL Server prior to SQL Server 2016SQL Server 2016 are now enabled by default. Avec le mode de compatibilité 130.With compatibility mode 130. Indicateur de trace 4199 sera applicable pour les nouveaux correctifs d’optimiseur de requête sont libérés après SQL Server 2016SQL Server 2016.Trace flag 4199 will still be applicable for new query optimizer fixes that are released after SQL Server 2016SQL Server 2016. Pour utiliser l’optimiseur de requête plus ancienne dans Base de données SQLSQL Database vous devez sélectionner le niveau de compatibilité 110.To use the older query optimizer in Base de données SQLSQL Database you must select compatibility level 110. Pour plus d’informations sur l’indicateur de Trace 4199, consultez indicateur de Trace 4199.For information about Trace Flag 4199, see Trace Flag 4199.

Différences entre les niveaux de compatibilité inférieurs et le niveau 120Differences Between Lower Compatibility Levels and Level 120

Cette section décrit les nouveaux comportements introduits avec le niveau de compatibilité 120.This section describes new behaviors introduced with compatibility level 120.

Paramètre de niveau de compatibilité inférieur ou égal à 110Compatibility-level setting of 110 or lower Paramètre de niveau de compatibilité égal à 120Compatibility-level setting of 120
L'ancien optimiseur de requête est utilisé.The older query optimizer is used. SQL Server 2014SQL Server 2014inclut des améliorations importantes pour le composant qui crée et optimise les plans de requête. includes substantial improvements to the component that creates and optimizes query plans. 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.This new query optimizer feature is dependent upon use of the database compatibility level 120. 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.New database applications should be developed using database compatibility level 120 to take advantage of these improvements. Les applications qui sont migrées des versions antérieures de SQL ServerSQL Server doivent être soigneusement testées pour vérifier que de bonnes performances sont conservées ou améliorées.Applications that are migrated from earlier versions of SQL ServerSQL Server should be carefully tested to confirm that good performance is maintained or improved. 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.If performance degrades, you can set the database compatibility level to 110 or earlier to use the older query optimizer methodology.

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.Database compatibility level 120 uses a new cardinality estimator that is tuned for modern data warehousing and OLTP workloads. Avant de définir le niveau de compatibilité de base de données à 110 en raison de problèmes de performances, consultez les recommandations contenues dans la section Plans de requête de la SQL Server 2014SQL Server 2014 Nouveautés du moteur de base de données rubrique.Before setting database compatibility level to 110 because of performance issues, see the recommendations in the Query Plans section of the SQL Server 2014SQL Server 2014 What's New in Database Engine topic.
Dans les niveaux de compatibilité inférieurs à 120, le paramètre de langue est ignoré lorsque vous convertissez un date à une valeur de chaîne.In compatibility levels lower than 120, the language setting is ignored when converting a date value to a string value. Notez que ce comportement est spécifique à la date type.Note that this behavior is specific only to the date type. Consultez l’exemple B dans la section exemples ci-dessous.See example B in the Examples section below. Le paramètre de langue n’est pas ignoré lors de la conversion un date à une valeur de chaîne.The language setting is not ignored when converting a date value to a string value.
Les références récursives dans la partie droite d'une clause EXCEPT créent une boucle infinie.Recursive references on the right-hand side of an EXCEPT clause create an infinite loop. Exemple C dans la section exemples ci-dessous illustre ce comportement.Example C in the Examples section below demonstrates this behavior. Les références récursives dans une clause EXCEPT génèrent une erreur conformément à la norme SQL ANSI.Recursive references in an EXCEPT clause generates an error in compliance with the ANSI SQL standard.
Une expression CTE récursive autorise les noms de colonnes en double.Recursive CTE allows duplicate column names. Les expressions CTE récursives n'autorisent pas les noms de colonnes en double.Recursive CTE do not allow duplicate column names.
Les déclencheurs désactivés sont activés en cas de modifications.Disabled triggers are enabled if the triggers are altered. La modification d'un déclencheur ne modifie pas son état (activé ou désactivé).Altering a trigger does not change the state (enabled or disabled) of the trigger.
La clause de table OUTPUT INTO ignore le paramètre IDENTITY_INSERT SETTING = OFF et permet l'insertion de valeurs explicites.The OUTPUT INTO table clause ignores the IDENTITY_INSERT SETTING = OFF and allows explicit values to be inserted. Il est impossible d'insérer des valeurs explicites dans une colonne identité de table quand IDENTITY_INSERT a la valeur OFF.You cannot insert explicit values for an identity column in a table when IDENTITY_INSERT is set to 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.When the database containment is set to partial, validating the $action field in the OUTPUT-clause of a MERGE statement can return a collation error. 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.The collation of the values returned by the $action clause of a MERGE statement is the database collation instead of the server collation and a collation conflict error is not returned.
A SELECT INTO instruction toujours crée une opération d’insertion monothread.A SELECT INTO statement always creates a single-threaded insert operation. A SELECT INTO instruction peut créer une opération d’insertion parallèle.A SELECT INTO statement can create a parallel insert operation. Lors de l'insertion d'un grand nombre de lignes, l'opération parallèle peut améliorer les performances.When inserting a large numbers of rows, the parallel operation can improve performance.

Différences entre les niveaux de compatibilité inférieurs et les niveaux 110 et 120Differences Between Lower Compatibility Levels and Levels 110 and 120

Cette section décrit les nouveaux comportements introduits avec le niveau de compatibilité 110.This section describes new behaviors introduced with compatibility level 110. Cette section s'applique également au niveau 120.This section also applies to level 120.

Paramètre de niveau de compatibilité inférieur ou égal à 100Compatibility-level setting of 100 or lower Paramètre de niveau de compatibilité d'au moins 110Compatibility-level setting of at least 110
Les objets de base de données CLR (Common Language Runtime) sont exécutés avec la version 4 du CLR.Common language runtime (CLR) database objects are executed with version 4 of the CLR. Toutefois, quelques changements de comportement introduits dans la version 4 du CLR sont évités.However, some behavior changes introduced in version 4 of the CLR are avoided. Pour plus d’informations, consultez Nouveautés de l’intégration du CLR.For more information, see What's New in CLR Integration. Les objets de base de données CLR sont exécutés avec la version 4 du CLR.CLR database objects are executed with version 4 of the CLR.
Les fonctions XQuery longueur de chaîne et sous-chaîne compte chaque caractère de substitution comme deux caractères.The XQuery functions string-length and substring count each surrogate as two characters. Les fonctions XQuery longueur de chaîne et sous-chaîne compte chaque caractère de substitution comme un caractère.The XQuery functions string-length and substring count each surrogate as one character.
PIVOT est autorisé dans une requête d'expression de table commune récursive.PIVOT is allowed in a recursive common table expression (CTE) query. Cependant, la requête retourne des résultats incorrects lorsqu'il existe plusieurs lignes par regroupement.However, the query returns incorrect results when there are multiple rows per grouping. PIVOT n'est pas autorisé dans une requête d'expression de table commune récursive.PIVOT is not allowed in a recursive common table expression (CTE) query. Une erreur est retournée.An error is returned.
L'algorithme RC4 est uniquement pris en charge pour des raisons de compatibilité descendante.The RC4 algorithm is only supported for backward compatibility. 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.New material can only be encrypted using RC4 or RC4_128 when the database is in compatibility level 90 or 100. (Non recommandé.) Dans SQL Server 2012SQL Server 2012, le matériel chiffré à l’aide de RC4 ou RC4_128 peut être déchiffré dans n’importe quel niveau de compatibilité.(Not recommended.) In SQL Server 2012SQL Server 2012, material encrypted using RC4 or RC4_128 can be decrypted in any compatibility level. Le nouveau matériel ne peut pas être chiffré à l'aide de RC4 ou RC4_128.New material cannot be encrypted using RC4 or RC4_128. Utilisez à la place un algorithme plus récent, tel qu'un des algorithmes AES.Use a newer algorithm such as one of the AES algorithms instead. Dans SQL Server 2012SQL Server 2012, le matériel chiffré à l’aide de RC4 ou RC4_128 peut être déchiffré dans n’importe quel niveau de compatibilité.In SQL Server 2012SQL Server 2012, material encrypted using RC4 or RC4_128 can be decrypted in any compatibility level.
Le style par défaut pour les opérations CAST et CONVERT sur temps et datetime2 des types de données est 121, sauf lorsque le type est utilisé dans une expression de colonne calculée.The default style for CAST and CONVERT operations on time and datetime2 data types is 121 except when either type is used in a computed column expression. Pour les colonnes calculées, le style par défaut est 0.For computed columns, the default style is 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.This behavior impacts computed columns when they are created, used in queries involving auto-parameterization, or used in constraint definitions.

Exemple D dans la section exemples ci-dessous montre la différence entre les styles 0 et 121.Example D in the Examples section below shows the difference between styles 0 and 121. Il ne présente pas le comportement décrit ci-dessus.It does not demonstrate the behavior described above. Pour plus d’informations sur les styles de date et d’heure, consultez CAST et CONVERT ( Transact-SQL ) .For more information about date and time styles, see CAST and CONVERT (Transact-SQL).
Niveau de compatibilité est 110, le style par défaut pour les opérations CAST et CONVERT sur temps et datetime2 des types de données est toujours 121.Under compatibility level 110, the default style for CAST and CONVERT operations on time and datetime2 data types is always 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.If your query relies on the old behavior, use a compatibility level less than 110, or explicitly specify the 0 style in the affected query.

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.Upgrading the database to compatibility level 110 will not change user data that has been stored to disk. Vous devez corriger manuellement ces données comme il convient.You must manually correct this data as appropriate. 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.For example, if you used SELECT INTO to create a table from a source that contained a computed column expression described above, the data (using style 0) would be stored rather than the computed column definition itself. Vous devez mettre à jour manuellement ces données pour qu'elles correspondent au style 121.You would need to manually update this data to match 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.Any columns in remote tables of type smalldatetime that are referenced in a partitioned view are mapped as datetime. Les colonnes correspondantes dans les tables locales (dans la même position ordinale dans la liste de sélection) doivent être de type datetime.Corresponding columns in local tables (in the same ordinal position in the select list) must be of 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.Any columns in remote tables of type smalldatetime that are referenced in a partitioned view are mapped as smalldatetime. Les colonnes correspondantes dans les tables locales (dans la même position ordinale dans la liste de sélection) doivent être de type smalldatetime.Corresponding columns in local tables (in the same ordinal position in the select list) must be of 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.After upgrading to 110, the distributed partitioned view will fail because of the data type mismatch. Vous pouvez résoudre ce problème en modifiant le type de données sur la table distante en datetime ou en définissant la compatibilité au niveau de la base de données locale à 100 ou inférieure.You can resolve this by changing the data type on the remote table to datetime or setting the compatibility level of the local database to 100 or lower.
La fonction SOUNDEX implémente les règles suivantes :SOUNDEX function implements the following rules:

(1) MAJUSCULE H ou W majuscules sont ignorés lors de la séparation de deux consonnes qui ont le même numéro dans le code SOUNDEX.1) Upper-case H or upper-case W are ignored when separating two consonants that have the same number in the SOUNDEX code.

2) si les 2 premiers caractères de character_expression ont le même numéro dans le code SOUNDEX, les deux caractères sont inclus.2) If the first 2 characters of character_expression have the same number in the SOUNDEX code, both characters are included. 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.Else, if a set of side-by-side consonants have same number in the SOUNDEX code, all of them are excluded except the first.
La fonction SOUNDEX implémente les règles suivantes :SOUNDEX function implements the following rules:

(1) si les majuscules H ou W majuscules séparer deux consonnes qui ont le même numéro dans le code SOUNDEX, la consonne à droite est ignorée.1) If upper-case H or upper-case W separate two consonants that have the same number in the SOUNDEX code, the consonant to the right is ignored

2) si un jeu de consonnes de côte-à-côte ont le même numéro dans le code SOUNDEX, toutes sont exclues, sauf le premier.2) If a set of side-by-side consonants have same number in the SOUNDEX code, all of them are excluded except the first.



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.The additional rules may cause the values computed by the SOUNDEX function to be different than the values computed under earlier compatibility levels. 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.After upgrading to compatibility level 110, you may need to rebuild the indexes, heaps, or CHECK constraints that use the SOUNDEX function. Pour plus d’informations, consultez SOUNDEX ( Transact-SQL )For more information, see SOUNDEX (Transact-SQL)

Différences entre le niveau de compatibilité 90 et le niveau 100Differences Between Compatibility Level 90 and Level 100

Cette section décrit les nouveaux comportements introduits avec le niveau de compatibilité 100.This section describes new behaviors introduced with compatibility level 100.

Paramètre de niveau de compatibilité égal à 90Compatibility-level setting of 90 Paramètre de niveau de compatibilité égal à 100Compatibility-level setting of 100 Possibilité d'impactPossibility of 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.The QUOTED_IDENTIFER setting is always set to ON for multistatement table-valued functions when they are created regardless of the session level setting. Le paramètre de session QUOTED IDENTIFIER est respecté lorsque les fonctions de table à instructions multiples sont créées.The QUOTED IDENTIFIER session setting is honored when multistatement table-valued functions are created. MoyenneMedium
Lorsque vous créez ou modifiez une fonction de partition, datetime et smalldatetime littéraux dans la fonction sont évalués en supposant que US_English comme paramètre de langue.When you create or alter a partition function, datetime and smalldatetime literals in the function are evaluated assuming US_English as the language setting. Le paramètre de langue actuel est utilisé pour évaluer datetime et smalldatetime littéraux dans la fonction de partition.The current language setting is used to evaluate datetime and smalldatetime literals in the partition function. MoyenneMedium
La clause FOR BROWSE est autorisée (et ignorée) dans les instructions INSERT et SELECT INTO.The FOR BROWSE clause is allowed (and ignored) in INSERT and SELECT INTO statements. La clause FOR BROWSE n'est pas autorisée dans les instructions INSERT et SELECT INTO.The FOR BROWSE clause is not allowed in INSERT and SELECT INTO statements. MoyenneMedium
Les prédicats de texte intégral sont autorisés dans la clause OUTPUT.Full-text predicates are allowed in the OUTPUT clause. Les prédicats de texte intégral ne sont pas autorisés dans la clause OUTPUT.Full-text predicates are not allowed in the OUTPUT clause. FaibleLow
Les instructions CREATE FULLTEXT STOPLIST, ALTER FULLTEXT STOPLIST et DROP FULLTEXT STOPLIST ne sont pas prises en charge.CREATE FULLTEXT STOPLIST, ALTER FULLTEXT STOPLIST, and DROP FULLTEXT STOPLIST are not supported. La liste de mots vides système est associée automatiquement aux nouveaux index de recherche en texte intégral.The system stoplist is automatically associated with new full-text indexes. Les instructions CREATE FULLTEXT STOPLIST, ALTER FULLTEXT STOPLIST et DROP FULLTEXT STOPLIST sont prises en charge.CREATE FULLTEXT STOPLIST, ALTER FULLTEXT STOPLIST, and DROP FULLTEXT STOPLIST are supported. FaibleLow
MERGE n'est pas appliqué comme mot clé réservé.MERGE is not enforced as a reserved keyword. MERGE est un mot clé entièrement réservé.MERGE is a fully reserved keyword. L'instruction MERGE est prise en charge sous les niveaux de compatibilité 100 et 90.The MERGE statement is supported under both 100 and 90 compatibility levels. FaibleLow
À l’aide de la <dml_table_source > argument de l’instruction INSERT déclenche une erreur de syntaxe.Using the <dml_table_source> argument of the INSERT statement raises a syntax error. 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.You can capture the results of an OUTPUT clause in a nested INSERT, UPDATE, DELETE, or MERGE statement, and insert those results into a target table or view. Cette opération est effectuée à l’aide de la <dml_table_source > argument de l’instruction INSERT.This is done using the <dml_table_source> argument of the INSERT statement. FaibleLow
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.Unless NOINDEX is specified, DBCC CHECKDB or DBCC CHECKTABLE performs both physical and logical consistency checks on a single table or indexed view and on all its nonclustered and XML indexes. Les index spatiaux ne sont pas pris en charge.Spatial indexes are not supported. 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.Unless NOINDEX is specified, DBCC CHECKDB or DBCC CHECKTABLE performs both physical and logical consistency checks on a single table and on all its nonclustered indexes. 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.However, on XML indexes, spatial indexes, and indexed views, only physical consistency checks are performed by default.

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.If WITH EXTENDED_LOGICAL_CHECKS is specified, logical checks are performed on indexed views, XML indexes, and spatial indexes, where present. Par défaut, les vérifications de cohérence physique sont effectuées avant les vérifications de cohérence logique.By default, physical consistency checks are performed before the logical consistency checks. Si l'option NOINDEX est également spécifiée, seules les vérifications logiques sont effectuées.If NOINDEX is also specified, only the logical checks are performed.
FaibleLow
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.When an OUTPUT clause is used with a data manipulation language (DML) statement and a run-time error occurs during statement execution, the entire transaction is terminated and rolled back. 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.When an OUTPUT clause is used with a data manipulation language (DML) statement and a run-time error occurs during statement execution, the behavior depends on the SET XACT_ABORT setting. 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.If SET XACT_ABORT is OFF, a statement abort error generated by the DML statement using the OUTPUT clause will terminate the statement, but the execution of the batch continues and the transaction is not rolled back. 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.If SET XACT_ABORT is ON, all run-time errors generated by the DML statement using the OUTPUT clause will terminate the batch, and the transaction is rolled back. FaibleLow
CUBE et ROLLUP ne sont pas appliqués comme mots clé réservés.CUBE and ROLLUP are not enforced as reserved keywords. CUBE et ROLLUP sont des mots clé réservés dans la clause GROUP BY.CUBE and ROLLUP are reserved keywords within the GROUP BY clause. FaibleLow
Une validation stricte est appliquée aux éléments du document XML anyType type.Strict validation is applied to elements of the XML anyType type. Validation de type lax est appliquée aux éléments de la anyType type.Lax validation is applied to elements of the anyType type. Pour plus d’informations, consultez composants génériques et Validation du contenu.For more information, see Wildcard Components and Content Validation. FaibleLow
Les attributs spéciaux xsi : nil et xsi : type ne peut pas être interrogés ou modifiés par les instructions de langage de manipulation de données.The special attributes xsi:nil and xsi:type cannot be queried or modified by data manipulation language statements.

Cela signifie que /e/@xsi:nil échoue alors que /e/@* ignore la xsi : nil et xsi : type attributs.This means that /e/@xsi:nil fails while /e/@* ignores the xsi:nil and xsi:type attributes. Toutefois, /e retourne le xsi : nil et xsi : type par souci de cohérence avec les attributs SELECT xmlCol, même si xsi:nil = "false".However, /e returns the xsi:nil and xsi:type attributes for consistency with SELECT xmlCol, even if xsi:nil = "false".
Les attributs spéciaux xsi : nil et xsi : type sont stockés comme attributs réguliers et peut être interrogé et modifié.The special attributes xsi:nil and xsi:type are stored as regular attributes and can be queried and modified.

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.For example, executing the query SELECT x.query('a/b/@*') returns all attributes including xsi:nil and xsi:type. Pour exclure ces types dans la requête, remplacez @* avec @*[namespace-uri(.) != " insérer uri d’espace de noms xsi " et non (local-name(.) = "type" oulocal-name(.) ="nil".To exclude these types in the query, replace @* with @*[namespace-uri(.) != "insert xsi namespace uri" and not (local-name(.) = "type" or local-name(.) ="nil".
FaibleLow
Une fonction définie par l'utilisateur qui convertit une valeur de chaîne constante XML en un type datetime SQL ServerSQL Server est marquée comme déterministe.A user-defined function that converts an XML constant string value to a SQL ServerSQL Server datetime type is marked as deterministic. Une fonction définie par l'utilisateur qui convertit une valeur de chaîne constante XML en un type datetime SQL ServerSQL Server est marquée comme non déterministe.A user-defined function that converts an XML constant string value to a SQL ServerSQL Server datetime type is marked as non-deterministic. FaibleLow
Les types de liste et d'union XML ne sont pas pris en charge complètement.The XML union and list types are not fully supported. Les types de liste et d'union sont complètement pris en charge ainsi que les fonctionnalités suivantes :The union and list types are fully supported including the following functionality:

Union de listeUnion of list

Union d'unionUnion of union

Liste de types atomiquesList of atomic types

Liste d'unionList of union
FaibleLow
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.The SET options required for an xQuery method are not validated when the method is contained in a view or inline table-valued function. 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.The SET options required for an xQuery method are validated when the method is contained in a view or inline table-valued function. Une erreur survient si les options SET de la méthode sont définies incorrectement.An error is raised if the SET options of the method are set incorrectly. FaibleLow
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.XML attribute values that contain end-of-line characters (carriage return and line feed) are not normalized according to the XML standard. Autrement dit, les deux caractères sont retournés à la place d'un caractère de saut de ligne unique.That is, both characters are returned instead of a single line-feed character. 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.XML attribute values that contain end-of-line characters (carriage return and line feed) are normalized according to the XML standard. 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.That is, all line breaks in external parsed entities (including the document entity) are normalized on input by translating both the two-character sequence #xD #xA and any #xD that is not followed by #xA to a single #xA character.

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.Applications that use attributes to transport string values that contain end-of-line characters will not receive these characters back as they are submitted. 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.To avoid the normalization process, use the XML numeric character entities to encode all end-of-line characters.
FaibleLow
Les propriétés de colonne ROWGUIDCOL et IDENTITY peuvent être nommées de manière incorrecte en tant que contrainte.The column properties ROWGUIDCOL and IDENTITY can be incorrectly named as a constraint. 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.For example the statement CREATE TABLE T (C1 int CONSTRAINT MyConstraint IDENTITY) executes, but the constraint name is not preserved and is not accessible to the user. Les propriétés de colonne ROWGUIDCOL et IDENTITY ne peuvent pas être nommées en tant que contrainte.The column properties ROWGUIDCOL and IDENTITY cannot be named as a constraint. L'erreur 156 est retournée.Error 156 is returned. FaibleLow
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.Updating columns by using a two-way assignment such as UPDATE T1 SET @v = column_name = <expression> can produce unexpected results because the live value of the variable can be used in other clauses such as the WHERE and ON clause during statement execution instead of the statement starting value. Cette opération peut modifier les significations des prédicats de façon imprévisible et ligne par ligne.This can cause the meanings of the predicates to change unpredictably on a per-row basis.

Ce comportement est applicable uniquement lorsque le niveau de compatibilité est défini à 90.This behavior is applicable only when the compatibility level is set to 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.Updating columns by using a two-way assignment produces expected results because only the statement starting value of the column is accessed during statement execution. FaibleLow
Consultez l’exemple E dans la section exemples ci-dessous.See example E in the Examples section below. Consultez l’exemple F dans la section exemples ci-dessous.See example F in the Examples section below. FaibleLow
La fonction ODBC {fn CONVERT()} utilise le format de date par défaut de la langue.The ODBC function {fn CONVERT()} uses the default date format of the language. 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.For some languages, the default format is YDM, which can result in conversion errors when CONVERT() is combined with other functions, such as {fn CURDATE()}, that expect a YMD format. 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.The ODBC function {fn CONVERT()} uses style 121 (a language-independent YMD format) when converting to the ODBC data types SQL_TIMESTAMP, SQL_DATE, SQL_TIME, SQLDATE, SQL_TYPE_TIME, and SQL_TYPE_TIMESTAMP. FaibleLow
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.Datetime intrinsics such as DATEPART do not require string input values to be valid datetime literals. Par exemple, SELECT DATEPART (année, '2007/05-30') compile correctement.For example, SELECT DATEPART (year, '2007/05-30') compiles successfully. Les intrinsèques datetime tels que DATEPART requièrent que les valeurs d'entrée de chaîne soient des littéraux datetime valides.Datetime intrinsics such as DATEPART require string input values to be valid datetime literals. L'erreur 241 est retournée lorsqu'un littéral datetime non valide est utilisé.Error 241 is returned when an invalid datetime literal is used. FaibleLow

Mots clés réservésReserved Keywords

Le paramètre de compatibilité détermine aussi les mots clés réservés par le Moteur de base de donnéesDatabase Engine.The compatibility setting also determines the keywords that are reserved by the Moteur de base de donnéesDatabase Engine. Le tableau suivant illustre les mots clés réservés introduits par chacun des niveaux de compatibilité.The following table shows the reserved keywords that are introduced by each of the compatibility levels.

Paramètre de niveau de compatibilitéCompatibility-level setting Mots clés réservésReserved keywords
130130 Doit être déterminé.To be determined.
120120 Aucun.None.
110110 WITHIN GROUP, TRY_CONVERT, SEMANTICKEYPHRASETABLE, SEMANTICSIMILARITYDETAILSTABLE, SEMANTICSIMILARITYTABLEWITHIN GROUP, TRY_CONVERT, SEMANTICKEYPHRASETABLE, SEMANTICSIMILARITYDETAILSTABLE, SEMANTICSIMILARITYTABLE
100100 CUBE, MERGE, ROLLUPCUBE, MERGE, ROLLUP
9090 EXTERNAL, PIVOT, UNPIVOT, REVERT, TABLESAMPLEEXTERNAL, 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.At a given compatibility level, the reserved keywords include all of the keywords introduced at or below that level. 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.Thus, for instance, for applications at level 110, all of the keywords listed in the preceding table are reserved. À 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.At the lower compatibility levels, level-100 keywords remain valid object names, but the level-110 language features corresponding to those keywords are unavailable.

Une fois introduit, un mot clé demeure réservé.Once introduced, a keyword remains reserved. 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.For example, the reserved keyword PIVOT, which was introduced in compatibility level 90, is also reserved in levels 100, 110, and 120.

Si une application utilise un identificateur réservé en tant que mot clé pour son niveau de compatibilité, l'application échoue.If an application uses an identifier that is reserved as a keyword for its compatibility level, the application will fail. Pour contourner ce problème, placez l’identificateur entre deux crochets ([]) ou des guillemets (» «), par exemple, pour mettre à niveau une application qui utilise l’identificateur externe au niveau de compatibilité 90, vous pouvez modifier l’identificateur soit [EXTERNAL] ou « EXTERNAL ».To work around this, enclose the identifier between either brackets ([]) or quotation marks (""); for example, to upgrade an application that uses the identifier EXTERNAL to compatibility level 90, you could change the identifier to either [EXTERNAL] or "EXTERNAL".

Pour plus d’informations, consultez Mots clés réservés (Transact-SQL).For more information, see Reserved Keywords (Transact-SQL).

AutorisationsPermissions

Nécessite l'autorisation ALTER sur la base de données.Requires ALTER permission on the database.

ExemplesExamples

A.A. Modification du niveau de compatibilitéChanging the compatibility level

L’exemple suivant modifie le niveau de compatibilité de la AdventureWorks2012AdventureWorks2012 à la base de données 110, SQL Server 2012SQL Server 2012.The following example changes the compatibility level of the AdventureWorks2012AdventureWorks2012 database to 110, SQL Server 2012SQL Server 2012.

ALTER DATABASE AdventureWorks2012  
SET COMPATIBILITY_LEVEL = 110;  
GO  

L’exemple suivant retourne le niveau de compatibilité de la base de données actuelle.The following example returns the compatibility level of the current database.

SELECT name, compatibility_level   
FROM sys.databases   
WHERE name = db_name();  

B.B. En ignorant l’instruction SET LANGUAGE sauf sous le niveau de compatibilité 120Ignoring the SET LANGUAGE statement except under compatibility level 120

La requête suivante ignore l’instruction SET LANGUAGE sauf sous le niveau de compatibilité 120.The following query ignores the SET LANGUAGE statement except under compatibility level 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  

C.C.

Pour le paramètre de niveau de compatibilité inférieur ou égal à 110, les références récursives dans la partie droite d’une clause EXCEPT créent une boucle infinie.For compatibility-level setting of 110 or lower, recursive references on the right-hand side of an EXCEPT clause create an infinite loop.

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;  

D.D.

Cet exemple montre la différence entre les styles 0 et 121.This example shows the difference between styles 0 and 121. Pour plus d’informations sur les styles de date et d’heure, consultez CAST et CONVERT ( Transact-SQL ) .For more information about date and time styles, see CAST and 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  

E.E.

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.Variable assignment is allowed in a statement containing a top-level UNION operator, but returns unexpected results. 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.For example, in the following statements, local variable @v is assigned the value of the column BusinessEntityID from the union of two tables. Par définition, lorsque l'instruction SELECT retourne plusieurs valeurs, la dernière valeur retournée est affectée à la variable.By definition, when the SELECT statement returns more than one value, the variable is assigned the last value that is returned. 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é.In this case, the variable is correctly assigned the last value, however, the result set of the SELECT UNION statement is also returned.

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;  

F.F.

L'attribution de variable n'est pas autorisée dans une instruction contenant un opérateur UNION de niveau supérieur.Variable assignment is not allowed in a statement containing a top-level UNION operator. L'erreur 10734 est retournée.Error 10734 is returned. Pour résoudre l'erreur, réécrivez la requête, comme dans l'exemple suivant.To resolve the error, rewrite the query as shown in the following example.

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

Voir aussiSee Also

ALTER DATABASE (Transact-SQL) ALTER DATABASE (Transact-SQL)
Mots clés réservés (Transact-SQL) Reserved Keywords (Transact-SQL)
CREATE DATABASE (SQL Server Transact-SQL) CREATE DATABASE (SQL Server Transact-SQL)
DATABASEPROPERTYEX (Transact-SQL) DATABASEPROPERTYEX (Transact-SQL)
sys.databases (Transact-SQL) sys.databases (Transact-SQL)
sys.database_files (Transact-SQL)sys.database_files (Transact-SQL)
Afficher ou modifier le niveau de compatibilité d’une base de donnéesView or Change the Compatibility Level of a Database