Niveau de compatibilité ALTER DATABASE (Transact-SQL)ALTER DATABASE (Transact-SQL) Compatibility Level

S’APPLIQUE À : ouiSQL Server ouiAzure SQL Database nonAzure SQL Data Warehouse nonParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Définit Transact-SQLTransact-SQL et des comportements de traitement des requêtes pour qu'ils soient compatibles avec la version de Moteur de base de données SQL ServerSQL Server Database Engine spécifiée.Sets Transact-SQLTransact-SQL and query processing behaviors to be compatible with the specified version of the Moteur de base de données SQL ServerSQL Server Database Engine. Pour connaître les autres options d’ALTER DATABASE, voir ALTER DATABASE.For other ALTER DATABASE options, see ALTER DATABASE.

Pour plus d’informations sur les conventions de la syntaxe, consultez Conventions de la syntaxe Transact-SQL.For more information about the syntax conventions, see Transact-SQL Syntax Conventions.

SyntaxeSyntax

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

ArgumentsArguments

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

COMPATIBILITY_LEVEL { 150 | 140 | 130 | 120 | 110 | 100 | 90 | 80 }COMPATIBILITY_LEVEL { 150 | 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é suivantes peuvent être configurées (toutes les versions ne prennent pas en charge l’ensemble des niveaux de compatibilité listés ci-dessus) :The following compatibility level values can be configured (not all versions supports all of the above listed compatibility level):

ProductProduct Version du moteur de base de donnéesDatabase Engine Version Désignation du niveau de compatibilité par défautDefault Compatibility Level Designation Valeurs de niveau de compatibilité prises en chargeSupported Compatibility Level Values
SQL Server 2019 (15.x)SQL Server 2019 (15.x) 1515 150150 150, 140, 130, 120, 110, 100150, 140, 130, 120, 110, 100
SQL Server 2017 (14.x)SQL Server 2017 (14.x) 1414 140140 140, 130, 120, 110, 100140, 130, 120, 110, 100
Azure SQL DatabaseAzure SQL Database pool élastique/base de données uniquesingle database/elastic pool 1212 140140 150, 140, 130, 120, 110, 100150, 140, 130, 120, 110, 100
Azure SQL DatabaseAzure SQL Database instance managéemanaged instance 1212 140140 150, 140, 130, 120, 110, 100150, 140, 130, 120, 110, 100
SQL Server 2016 (13.x)SQL Server 2016 (13.x) 1313 130130 130, 120, 110, 100130, 120, 110, 100
SQL Server 2014 (12.x)SQL Server 2014 (12.x) 1212 120120 120, 110, 100120, 110, 100
SQL Server 2012 (11.x)SQL Server 2012 (11.x) 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 2005 (9.x)SQL Server 2005 (9.x) 99 9090 90, 8090, 80
SQL Server 2000SQL Server 2000 88 8080 8080

NotesRemarks

Pour toutes les installations de SQL ServerSQL Server, le niveau de compatibilité par défaut est défini sur la version du 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. Ce niveau est attribué aux nouvelles bases de données, sauf si la base de données model a un niveau de compatibilité inférieur.New databases are set to this level unless the model database has a lower compatibility level. Pour les bases de données attachées ou restaurées à partir d’une version antérieure de SQL ServerSQL Server, la base de données conserve son niveau de compatibilité existant si celui-ci correspond au moins à la valeur minimale autorisée pour cette instance de SQL ServerSQL Server.For databases attached or restored 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. Le déplacement d’une base de données ayant un niveau de compatibilité inférieur à celui autorisé par le Moteur de base de donnéesDatabase Engine a pour effet de lui attribuer automatiquement le niveau de compatibilité autorisé le plus bas.Moving a database with a compatibility level lower than the allowed level by the Moteur de base de donnéesDatabase Engine, automatically 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.

Voici les comportements auxquels vous pouvez vous attendre avec SQL Server 2017 (14.x)SQL Server 2017 (14.x) quand une base de données est attachée ou restaurée et après une mise à niveau sur place :The below behaviors are expected for SQL Server 2017 (14.x)SQL Server 2017 (14.x) when a database is attached or restored, and after an in-place upgrade:

  • Si le niveau de compatibilité d'une base de données utilisateur est à 100 ou supérieur avant la mise à niveau, il reste le même après la mise à niveau.If the compatibility level of a user database was 100 or higher before the upgrade, it remains the same after upgrade.
  • Si le niveau de compatibilité d’une base de données utilisateur était à 90 avant la mise à niveau, dans la base de données mise à niveau, le niveau de compatibilité est défini à 100, ce qui correspond au niveau de compatibilité le plus bas pris en charge dans SQL Server 2017 (14.x)SQL Server 2017 (14.x).If the compatibility level of a user database was 90 before upgrade, in the upgraded database, the compatibility level is set to 100, which is the lowest supported compatibility level in SQL Server 2017 (14.x)SQL Server 2017 (14.x).
  • Les niveaux de compatibilité des bases de données tempdb, model, msdb et Resource sont définis sur le niveau de compatibilité par défaut d’une version Moteur de base de donnéesDatabase Engine donnée.The compatibility levels of the tempdb, model, msdb and Resource databases are set to the default compatibility level for a given Moteur de base de donnéesDatabase Engine version.
  • La base de données système master conserve le niveau de compatibilité qu’elle avait avant la mise à niveau.The master system database retains the compatibility level it had before upgrade.

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. Le nouveau paramètre de compatibilité d’une base de données prend effet à partir du moment où une commande USE <database> est émise ou qu’un nouveau compte de connexion est traité avec cette base de données définie comme contexte de base de données par défaut.The new compatibility level setting for a database takes effect when a USE <database> command is issued, or a new login is processed with that database as the default database context. Pour afficher le niveau de compatibilité actuel d’une base de données, interrogez la colonne compatibility_level de la vue de catalogue sys.databases.To view the current compatibility level of a database, query the compatibility_level column in the sys.databases catalog view.

Notes

Une base de données de distribution créée dans une version antérieure de SQL ServerSQL Server et mise à niveau vers SQL Server 2016 (13.x)SQL Server 2016 (13.x) RTM ou Service Pack 1 a un niveau de compatibilité de 90, qui n’est pas pris en charge pour les autres bases de données.A distribution database that was created in an earlier version of SQL ServerSQL Server and is upgraded to SQL Server 2016 (13.x)SQL Server 2016 (13.x) RTM or Service Pack 1 has a compatibility level of 90, which is not supported for other databases. Cela n’a aucun impact sur la fonctionnalité de réplication.This does not have an impact on the functionality of replication. Une mise à niveau vers des Service Packs et des versions ultérieures de SQL ServerSQL Server se traduit par une élévation du niveau de compatibilité de la base de données de distribution pour atteindre celui de la base de données MASTER.Upgrading to later service packs and versions of SQL ServerSQL Server will result in the compatibility level of the distribution database to be increased to match that of the master database.

Notes

À partir de janvier 2018, dans Azure SQL DatabaseAzure SQL Database, le niveau de compatibilité par défaut est 140 pour les bases de données nouvellement créées.As of January 2018, in Azure SQL DatabaseAzure SQL Database, the default compatibility level is 140 for newly created databases. MicrosoftMicrosoft ne met pas à jour le niveau de compatibilité pour les bases de données existantes.does not update database compatibility level for existing databases. Il incombe aux clients de le faire à leur convenance.It is up to customers to do at their own discretion.
MicrosoftMicrosoft recommande vivement aux clients d’envisager de passer au dernier niveau de compatibilité afin de tirer parti des dernières améliorations apportées à l’optimisation des requêtes.highly recommends that customers plan to upgrade to the latest compatibility level in order to leverage the latest query optimization improvements.

Pour tirer parti du niveau de compatibilité de base de données 140 pour une base de données dans son ensemble, mais en préférant le modèle d’estimation de la cardinalité de SQL Server 2012 (11.x)SQL Server 2012 (11.x), avec un mappage au niveau de compatibilité de base de données 110, consultez ALTER DATABASE SCOPED CONFIGURATION et en particulier son mot clé LEGACY_CARDINALITY_ESTIMATION = ON.To leverage database compatibility level 140 for a database overall, but opt-in to the cardinality estimation model of SQL Server 2012 (11.x)SQL Server 2012 (11.x), which maps to database compatibility level 110, see ALTER DATABASE SCOPED CONFIGURATION, 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 les plus importantes entre deux niveaux de compatibilité différents sur Azure SQL DatabaseAzure SQL Database, consultez Meilleures performances des requêtes avec le niveau de compatibilité 130 dans Azure SQL Database.For details about how to assess the performance differences of your most important queries, between two different compatibility levels on Azure SQL DatabaseAzure SQL Database, see Improved Query Performance with Compatibility Level 130 in Azure SQL Database. Notez que cet article fait référence au niveau de compatibilité 130 et à SQL ServerSQL Server, mais la même méthodologie s’applique pour passer au niveau 140 dans SQL ServerSQL Server et Azure SQL DatabaseAzure SQL Database.Note that this article refers to compatibility level 130 and SQL ServerSQL Server, but the same methodology applies for upgrades to 140 in SQL ServerSQL Server and Azure SQL DatabaseAzure SQL Database.

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

SELECT SERVERPROPERTY('ProductVersion');

Notes

Notez que Azure SQL DatabaseAzure SQL Database ne prend pas en charge l’intégralité des fonctionnalités disponibles avec les différents niveaux de compatibilité.Not all features that vary by compatibility level are supported on Azure SQL DatabaseAzure SQL Database.

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

SELECT name, compatibility_level FROM sys.databases;

Niveaux de compatibilité et mises à niveau du moteur de base de donnéesCompatibility levels and Database Engine upgrades

Le niveau de compatibilité de base de données est un outil précieux quand il s’agit de moderniser une base de données. Il permet en effet de mettre à niveau Moteur de base de données SQL ServerSQL Server Database Engine tout en continuant de connecter l’état opérationnel des applications en conservant le niveau de compatibilité de base de données antérieur à la mise à niveau.Database compatibility level is a valuable tool to assist in database modernization, by allowing the Moteur de base de données SQL ServerSQL Server Database Engine to be upgraded, while keeping connecting applications functional status by maintaining the same pre-upgrade database compatibility level. Cela signifie qu’il est possible de procéder à une mise à niveau à partir d’une version antérieure de SQL ServerSQL Server (telle que SQL Server 2008SQL Server 2008) vers SQL Server 2017SQL Server 2017 ou Azure SQL DatabaseAzure SQL Database (avec instance managée) sans aucune modification de l’application (à l’exception de la connectivité de base de données).This means that it is possible to upgrade from an older version of SQL ServerSQL Server (such as SQL Server 2008SQL Server 2008) to SQL Server 2017SQL Server 2017 or Azure SQL DatabaseAzure SQL Database (including Managed Instance) with no application changes (except for database connectivity). Pour plus d’informations, consultez Certification de compatibilité.For more information, see Compatibility Certification.

Tant que l’application n’a pas besoin de tirer part des améliorations disponibles uniquement dans un niveau de compatibilité de base de données plus élevé, il est judicieux de mettre à niveau le Moteur de base de données SQL ServerSQL Server Database Engine et de conserver le niveau de compatibilité de base de données précédent.As long as the application does not need to leverage enhancements that are only available in a higher database compatibility level, it is a valid approach to upgrade the Moteur de base de données SQL ServerSQL Server Database Engine and maintain the previous database compatibility level. Pour plus d’informations sur l’utilisation du niveau de compatibilité pour la compatibilité descendante, consultez Certification de compatibilité.For more information on using compatibility level for backward compatibility, see Compatibility Certification.

Bonnes pratiques pour la mise à niveau du niveau de compatibilité de base de donnéesBest Practices for upgrading Database Compatibility Level

Pour connaître le workflow recommandé pour la mise à niveau du niveau de compatibilité, consultez Changer le mode de compatibilité de la base de données et utiliser le magasin des requêtes.For the recommended workflow for upgrading the compatibility level, see Change the Database Compatibility Mode and use the Query Store. En outre, pour une expérience assistée avec la mise à niveau du niveau de compatibilité de base de données, consultez Mise à niveau de bases de données à l’aide de l’Assistant Paramétrage de requêtes.Additionally, for an assisted experience with upgrading the database compatibility level, see Upgrading Databases by using the Query Tuning Assistant.

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.

Utilisation du niveau de compatibilité pour la compatibilité descendanteUsing compatibility level for backward compatibility

Le paramètre de niveau de compatibilité de la base de données fournit une compatibilité descendante avec les versions antérieures de SQL ServerSQL Server en ce qui concerne Transact-SQLTransact-SQL et les comportements d’optimisation des requêtes uniquement pour la base de données spécifiée, et non pour l’ensemble du serveur.The database compatibility level setting provides backward compatibility with earlier versions of SQL ServerSQL Server in what relates to Transact-SQLTransact-SQL and query optimization behaviors only for the specified database, not for the entire server.

À partir du mode de compatibilité 130, tout nouveau plan de requête affectant les fonctionnalités n’est ajouté intentionnellement qu’au nouveau niveau de compatibilité.Starting with compatibility mode 130, any new query plan affecting features have been intentionally added only to the new compatibility level. Lors des mises à niveau, cela permet de réduire les risques liés à la dégradation des performances en raison des modifications du plan de requête potentiellement introduites par de nouveaux comportements d’optimisation des requêtes.This has been done in order to minimize the risk during upgrades that arise from performance degradation due to query plan changes potentially introduced by new query optimization behaviors.

Du point de vue de l’application, utilisez le niveau de compatibilité le plus bas comme chemin de migration plus sûr pour contourner les problèmes liés aux différences de versions dans les comportements qui sont contrôlés par le paramètre de niveau de compatibilité approprié.From an application perspective, use the lower compatibility level as a safer migration path to work around version differences, in the behaviors that are controlled by the relevant compatibility level setting. L’objectif doit toujours être de procéder à une mise à niveau vers le niveau de compatibilité le plus récent à un moment donné, de façon à hériter de certaines nouvelles fonctionnalités comme le traitement de requêtes intelligent, mais cette opération doit être effectuée de façon contrôlée.The goal should still be to upgrade to the latest compatibility level at some point in time, in order to inherit some of the new features such as Intelligent Query Processing, but to do so in a controlled way.

Pour plus d’informations, notamment sur le workflow recommandé pour la mise à niveau du niveau de compatibilité de base de données, consultez Bonnes pratiques pour la mise à niveau du niveau de compatibilité de base de données.For more details, including the recommended workflow for upgrading database compatibility level, see Best Practices for upgrading Database Compatibility Level.

Important

Les fonctionnalités obsolètes obtenues précédemment via une version de SQL ServerSQL Server ne sont pas protégées par le niveau de compatibilité.Discontinued functionality introduced in a given SQL ServerSQL Server version is not protected by compatibility level. Il s’agit des fonctionnalités qui ont été supprimées du Moteur de base de données SQL ServerSQL Server Database Engine.This refers to functionality that was removed from the Moteur de base de données SQL ServerSQL Server Database Engine. Par exemple, l’indicateur FASTFIRSTROW a été abandonné dans SQL Server 2012 (11.x)SQL Server 2012 (11.x), et remplacé par l’indicateur OPTION (FAST n ).For example, the FASTFIRSTROW hint was discontinued in SQL Server 2012 (11.x)SQL Server 2012 (11.x) and replaced with the OPTION (FAST n ) hint. Le fait de définir le niveau de compatibilité de la base de données sur 110 ne permet pas de restaurer l’indicateur obsolète.Setting the database compatibility level to 110 will not restore the discontinued hint.

Pour plus d’informations sur la fonctionnalité discontinue, consultez Fonctionnalité de moteur de base de données discontinue dans SQL Server 2016, Fonctionnalité de moteur de base de données dans SQL Server 2014 et Fonctionnalité de moteur de base de données dans SQL Server 2012.For more information on discontinued functionality, see Discontinued Database Engine Functionality in SQL Server 2016, Discontinued Database Engine Functionality in SQL Server 2014, and Discontinued Database Engine Functionality in SQL Server 2012.

Important

Les changements importants introduits par une version donnée de SQL ServerSQL Server peuvent ne pas être protégés par le niveau de compatibilité.Breaking changes introduced in a given SQL ServerSQL Server version may not be protected by compatibility level. Il s’agit des changements de comportement entre les versions du Moteur de base de données SQL ServerSQL Server Database Engine.This refers to behavior changes between versions of the Moteur de base de données SQL ServerSQL Server Database Engine. Le comportement Transact-SQLTransact-SQL est généralement protégé par le niveau de compatibilité.Transact-SQLTransact-SQL behavior is usually protected by compatibility level. Toutefois, les objets système modifiés ou supprimés ne sont pas protégés par le niveau de compatibilité.However, changed or removed system objects are not protected by compatibility level.

Parmi les changements importants protégés par le niveau de compatibilité figure la conversion implicite du type de données datetime en type de données datetime2.An example of a breaking change protected by compatibility level is an implicit conversion from datetime to datetime2 data types. Avec le niveau de compatibilité de base de données 130, il offre une meilleure précision en prenant en compte les fractions de milliseconde, ce qui génère différentes valeurs converties.Under database compatibility level 130, these show improved accuracy by accounting for the fractional milliseconds, resulting in different converted values. Pour restaurer l’ancien comportement de conversion, définissez le niveau de compatibilité de la base de données sur 120 ou sur une valeur inférieure.To restore previous conversion behavior, set the database compatibility level to 120 or lower.

Parmi les changements importants non protégés par le niveau de compatibilité figurent :Examples of breaking changes not protected by compatibility level are:

  • Les noms de colonne modifiés dans les objets système.Changed column names in system objects. Dans SQL Server 2012 (11.x)SQL Server 2012 (11.x), la colonne single_pages_kb de sys.dm_os_sys_info a été renommée pages_kb.In SQL Server 2012 (11.x)SQL Server 2012 (11.x) the column single_pages_kb in sys.dm_os_sys_info was renamed to pages_kb. Quel que soit le niveau de compatibilité, la requête SELECT single_pages_kb FROM sys.dm_os_sys_info génère l’erreur 207 (nom de colonne non valide).Regardless of the compatibility level, the query SELECT single_pages_kb FROM sys.dm_os_sys_info will produce error 207 (Invalid column name).
  • Les objets système supprimés.Removed system objects. Dans SQL Server 2012 (11.x)SQL Server 2012 (11.x), sp_dboption a été supprimé.In SQL Server 2012 (11.x)SQL Server 2012 (11.x) the sp_dboption was removed. Quel que soit le niveau de compatibilité, l’instruction EXEC sp_dboption 'AdventureWorks2016', 'autoshrink', 'FALSE'; génère l’erreur 2812 (procédure stockée ’sp_dboption’ introuvable).Regardless of the compatibility level, the statement EXEC sp_dboption 'AdventureWorks2016', 'autoshrink', 'FALSE'; will produce error 2812 (Could not find stored procedure 'sp_dboption').

Pour plus d’informations sur les changements importants, consultez Changements importants dans les fonctionnalités du moteur de base de données de SQL Server 2017, Changements importants dans les fonctionnalités du moteur de base de données de SQL Server 2016, Changements importants dans les fonctionnalités du moteur de base de données de SQL Server 2014 et Changements importants dans les fonctionnalités du moteur de base de données de SQL Server 2012.For more information on breaking changes, see Breaking Changes to Database Engine Features in SQL Server 2017, Breaking Changes to Database Engine Features in SQL Server 2016, Breaking Changes to Database Engine Features in SQL Server 2014, and Breaking Changes to Database Engine Features in SQL Server 2012.

Différences entre les niveaux de compatibilité 140 et 150Differences Between Compatibility Level 140 and Level 150

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

Le niveau 150 de compatibilité de la base de données est actuellement en préversion publique pour Azure SQL DatabaseAzure SQL Database et SQL Server 2019 (15.x)SQL Server 2019 (15.x).Database compatibility level 150 is currently in Public Preview for Azure SQL DatabaseAzure SQL Database and SQL Server 2019 (15.x)SQL Server 2019 (15.x). Il sera associé à la prochaine génération d’amélioration du traitement des requêtes, au-delà de ce qui a été introduit dans le niveau 140 de compatibilité de la base de données.This database compatibility level will be associated with the next generation of query processing improvements beyond what was introduced in database compatibility level 140.

Paramètre de niveau de compatibilité inférieur ou égal à 140Compatibility-level setting of 140 or lower Paramètre de niveau de compatibilité égal à 150Compatibility-level setting of 150
L’entrepôt de données relationnelles et les charges de travail analytiques peuvent ne pas être en mesure de tirer parti des index columnstore en raison d’une charge mémoire OLTP, de l’absence de prise en charge du fournisseur ou d’autres limitations.Relational data warehouse and analytic workloads may not be able to leverage columnstore indexes due to OLTP-overhead, lack of vendor support or other limitations. Sans les index columnstore, ces charges de travail ne peuvent pas bénéficier du mode d’exécution par lot.Without columnstore indexes, these workloads cannot benefit from batch execution mode. Le mode d’exécution par lot est désormais disponible pour les charges de travail analytiques sans avoir besoin d’index columnstore.Batch execution mode is now available for analytic workloads without requiring columnstore indexes. Pour plus d’informations, consultez mode batch sur rowstore.For more information, see batch mode on rowstore.
Les requêtes en mode ligne qui demandent des tailles insuffisantes d’allocation de mémoire et entraînent des dépassements sur le disque, peuvent continuer à avoir des problèmes lors des exécutions suivantes.Row-mode queries that request insufficient memory grant sizes that result in spills to disk may continue to have issues on consecutive executions. Les requêtes en mode ligne qui demandent des tailles insuffisantes d’allocation de mémoire et entraînent des dépassements sur le disque, peuvent avoir de meilleures performances lors des exécutions suivantes.Row-mode queries that request insufficient memory grant sizes that result in spills to disk may have improved performance on consecutive executions. Pour plus d’informations, consultez rétroaction d’allocation de mémoire en mode ligne.For more information, see row mode memory grant feedback.
Les requêtes en mode ligne qui demandent des tailles excessives d’allocation de mémoire et entraînent des problèmes de concurrence, peuvent continuer à avoir des problèmes lors des exécutions suivantes.Row-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 ligne qui demandent des tailles excessives d’allocation de mémoire et entraînent des problèmes de concurrence, peuvent avoir une concurrence améliorée lors des exécutions suivantes.Row-mode queries that request an excessive memory grant size that results in concurrency issues may have improved concurrency on consecutive executions. Pour plus d’informations, consultez rétroaction d’allocation de mémoire en mode ligne.For more information, see row mode memory grant feedback.
Les requêtes faisant référence à des fonctions scalaires définies par l’utilisateur T-SQL utilisent l’invocation itérative, ne disposent pas de l’évaluation des coûts et forcent l’exécution en série.Queries referencing T-SQL scalar UDFs will use iterative invocation, lack costing and force serial execution. Les fonctions scalaires définies par l’utilisateur T-SQL sont transformées en expressions relationnelles équivalentes qui sont « placées inline » dans la requête appelante, ce qui entraîne souvent des gains de performances significatifs.T-SQL scalar UDFs are transformed into equivalent relational expressions that are “inlined” into the calling query, often resulting in significant performance gains. Pour plus d’informations, consultez Incorporation des fonctions UDF scalaires T-SQL.For more information, see T-SQL scalar UDF inlining.
Les variables de table utilisent une estimation fixe pour l’estimation de la cardinalité.Table variables use a fixed guess for the cardinality estimate. Si le nombre réel de lignes est nettement supérieur à la valeur devinée, les performances des opérations en aval peuvent être dégradées.If the actual number of rows is much higher than the guessed value, performance of downstream operations can suffer. Les nouveaux plans utilisent la cardinalité réelle de la variable de table rencontrée à la première compilation, au lieu d’une estimation fixe.New plans will use the actual cardinality of the table variable encountered on first compilation instead of a fixed guess. Pour plus d'informations, consultez compilation différée de variable de table.For more information, see table variable deferred compilation.

Pour plus d’informations sur les fonctionnalités de traitement des requêtes activées dans le niveau de compatibilité de base de données 150, consultez Nouveautés de SQL Server 2019 et Traitement de requêtes intelligent dans les bases de données SQL.For more information on query processing features enabled in database compatibility level 150, refer to What's new in SQL Server 2019 and Intelligent query processing in SQL databases.

Différences entre le niveau de compatibilité 130 et le 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é égal à 140Compatibility-level setting of 140
Les estimations de cardinalité pour les instructions qui référencent des fonctions table à instructions multiples utilisent une estimation de ligne fixe.Cardinality estimates for statements referencing multi-statement table-valued functions use a fixed row guess. Les estimations de cardinalité pour les instructions éligibles référençant des fonctions table à instructions multiples utilisent la cardinalité de la sortie de la fonction.Cardinality estimates for eligible statements referencing multi-statement table-valued functions will use the actual cardinality of the function output. Ceci peut être activé via l’exécution entrelacée 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 des tailles insuffisantes d’allocation de mémoire et entraînent des dépassements sur le disque, peuvent continuer à avoir des problèmes lors des exécutions suivantes.Batch-mode queries that request insufficient memory grant sizes that result in spills to disk may continue to have issues on consecutive executions. Les requêtes en mode de traitement par lot qui demandent des tailles insuffisantes d’allocation de mémoire et entraînent des dépassements sur le disque, peuvent avoir de meilleures performances lors des exécutions suivantes.Batch-mode queries that request insufficient memory grant sizes that result in spills to disk may have improved performance on consecutive executions. Ceci est possible avec la rétroaction d’allocation de mémoire en mode batch, qui met à jour la taille de l’allocation de mémoire d’un plan mis en cache, si des dépassements se produisent 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.
Les requêtes en mode batch qui demandent des tailles excessives d’allocation de mémoire et entraînent des problèmes de concurrence, peuvent continuer à avoir des problèmes lors des exécutions suivantes.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 des tailles excessives d’allocation de mémoire et entraînent des problèmes de concurrence, peuvent avoir une concurrence améliorée lors des exécutions suivantes.Batch-mode queries that request an excessive memory grant size that results in concurrency issues may have improved concurrency on consecutive executions. Ceci est possible avec la rétroaction d’allocation de mémoire en mode batch, qui met à jour la taille de l’allocation de mémoire d’un plan mis en cache, si une quantité excessive de mémoire a été demandée.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, que sont les boucles imbriquées, les jointures hachées et les jointures 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 non adapté peut être sélectionné.If cardinality estimates are incorrect for join inputs, an inappropriate join algorithm may be selected. Dans ce cas, les performances en pâtissent et l’algorithme de jointure non adapté continue d’être utilisé jusqu’à la recompilation du plan mis en cache.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 les entrées de jointure de build extérieures, un algorithme de jointure non adapté 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 si l’instruction est éligible pour une jointure adaptive, une boucle imbriquée est utilisée pour les entrées de jointure peu volumineuses, et une jointure hachée est utilisée pour les entrées de jointure volumineuses, tout cela, 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.
Les plans simples qui référencent des index columnstore ne sont pas éligibles pour l’exécution en mode batch.Trivial plans referencing Columnstore indexes are not eligible for batch mode execution. Un plan simple qui référence des index columnstore sera supprimé en faveur d’un plan éligible pour l’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 uniquement être exécuté 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.
Les fonctions table à instructions multiples ne peuvent pas utiliser l’exécution entrelacéeMulti-statement table-valued functions (TVF's) do not have interleaved execution Pour les fonctions table à instructions multiples, l’exécution entrelacée améliore la qualité du plan.Interleaved execution for multi-statement TVFs to improve plan quality.

Les correctifs qui se trouvaient sous l’indicateur de trace 4199 dans les versions de SQL Server antérieures à SQL Server 2017 sont maintenant activés par défautFixes that were under trace flag 4199 in earlier versions of SQL Server prior to SQL Server 2017 are now enabled by default. avec le niveau de compatibilité 140.With compatibility mode 140. L’indicateur de trace 4199 est toujours applicable aux correctifs de l’optimiseur de requête qui ont été publiés après la publication de 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 le niveau 130Differences 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é égal à 130Compatibility-level setting of 130
Dans une instruction INSERT-SELECT, INSERT est monothread.The INSERT in an INSERT-SELECT statement is single-threaded. Dans une instruction INSERT-SELECT, INSERT est multithread ou peut présenter un plan parallèle.The INSERT in an INSERT-SELECT statement is multi-threaded or can have a parallel plan.
Les requêtes d’une table à mémoire optimisée sont exécutées en monothread.Queries on a memory-optimized table execute single-threaded. Les requêtes d’une table à mémoire optimisée peuvent désormais avoir des plans parallèles.Queries on a memory-optimized table can now have parallel plans.
Comprend l’estimateur de cardinalité SQL 2014 CardinalityEstimationModelVersion="120"Introduced the SQL 2014 Cardinality estimator CardinalityEstimationModelVersion="120" Améliorations supplémentaires de l’estimation de cardinalité avec le niveau de compatibilité 130, qui est visible à partir d’un plan de requête.Further cardinality estimation (CE) Improvements with the Cardinality Estimation Model 130 which is visible from a Query plan. CardinalityEstimationModelVersion="130"CardinalityEstimationModelVersion="130"
Changements au niveau du mode batch et du mode ligne avec les index columnstore :Batch mode versus Row Mode changes with Columnstore indexes:
  • Le tri du contenu d’une table avec un index columnstore s’effectue en mode ligneSorts on a table with Columnstore index are in Row mode
  • Les agrégats de fonction de fenêtrage fonctionnent en mode ligne (par exemple, LAG ou LEAD)Windowing function aggregates operate in row mode such as LAG or LEAD
  • Les requêtes exécutées sur des tables Columnstore avec plusieurs clauses distinctes sont exécutées en mode ligneQueries on Columnstore tables with Multiple distinct clauses operated in Row mode
  • Les requêtes s’exécutant sous MAXDOP 1 ou avec un plan en série sont exécutées en mode ligneQueries running under MAXDOP 1 or with a serial plan executed in Row mode
Changements au niveau du mode batch et du mode ligne avec les index columnstore :Batch mode versus Row Mode changes with Columnstore indexes:
  • Le tri du contenu d’une table avec un index columnstore s’effectue désormais en mode batchSorts on a table with a Columnstore index are now in batch mode
  • Les agrégats de fenêtrage fonctionnent désormais en mode batch (par exemple, LAG ou LEAD)Windowing aggregates now operate in batch mode such as LAG or LEAD
  • Les requêtes exécutées sur des tables Columnstore avec plusieurs clauses distinctes sont exécutées en mode batchQueries on Columnstore tables with Multiple distinct clauses operate in Batch mode
  • Les requêtes exécutées sous MAXDOP 1 ou avec un plan en série sont exécutées en mode batchQueries running under MAXDOP 1 or with a serial plan execute in Batch Mode
Les statistiques peuvent être automatiquement mises à jour.Statistics can be automatically updated. La logique qui met à jour automatiquement les statistiques est plus agressive sur les tables volumineuses.The logic which automatically updates statistics is more aggressive on large tables. Dans la pratique, cela doit réduire les problèmes de performances des requêtes, lorsque des lignes nouvellement insérées sont interrogées fréquemment, mais que les statistiques n’ont pas été mises à jour pour inclure ces 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.
La trace 2371 est désactivée par défaut dans SQL Server 2014 (12.x)SQL Server 2014 (12.x).Trace 2371 is OFF by default in SQL Server 2014 (12.x)SQL Server 2014 (12.x). La trace 2371 est activée par défaut dans SQL Server 2016 (13.x)SQL Server 2016 (13.x).Trace 2371 is ON by default in SQL Server 2016 (13.x)SQL Server 2016 (13.x). L’indicateur de trace 2371 demande au programme de mise à jour automatique des statistiques d’échantillonner un sous-ensemble de lignes plus petit mais plus raisonnable, 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.

L’une des améliorations est qu’il est désormais possible d’inclure dans l’échantillon plus de lignes que ce qui a été inséré récemment.One improvement is to include in the sample more rows that were inserted recently.

Une autre amélioration est que vous pouvez laisser les requêtes s’exécuter pendant que le processus de mise à jour des statistiques s’exécute, plutôt que de bloquer les requêtes.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 processus monothread.For level 120, statistics are sampled by a single-threaded process. Pour le niveau 130, les statistiques sont échantillonnées par un processus multithread.For level 130, statistics are sampled by a multi-threaded process.
Le nombre de clés étrangères entrantes est limité à 253.253 incoming foreign keys is the limit. Une table peut être référencée par un nombre maximal de 10 000 clés étrangères entrantes (ou types de références similaires).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 dépréciés MD2, MD4, MD5, SHA et SHA1 sont autorisés.The deprecated MD2, MD4, MD5, SHA, and SHA1 hash algorithms are permitted. Seuls les algorithmes de hachage SHA2_256 et SHA2_512 sont autorisés.Only SHA2_256 and SHA2_512 hash algorithms are permitted.
SQL Server 2016 (13.x)SQL Server 2016 (13.x) comprend des améliorations au niveau de certaines conversions de types de données et de certaines opérations (dont la plupart sont peu courantes).includes improvements in some data types conversions and some (mostly uncommon) operations. Pour plus d’informations, consultez Améliorations de SQL Server 2016 dans le traitement de certains types de données et des opérations peu courantes.For details see SQL Server 2016 improvements in handling some data types and uncommon operations.
La fonction STRING_SPLIT n’est pas disponible.The STRING_SPLIT function is not available. La fonction STRING_SPLIT est disponible sous le niveau de compatibilité 130 ou supérieur.The STRING_SPLIT function is available under compatibility level 130 or above. Si votre niveau de compatibilité de base de données est inférieur à 130, SQL ServerSQL Server ne peut pas trouver et exécuter la fonction STRING_SPLIT.If your database compatibility level is lower than 130, SQL ServerSQL Server will not be able to find and execute STRING_SPLIT function.

Les correctifs qui se trouvaient sous l’indicateur de trace 4199 dans les versions de SQL ServerSQL Server antérieures à SQL Server 2016 (13.x)SQL Server 2016 (13.x) sont maintenant activés par défautFixes that were under trace flag 4199 in earlier versions of SQL ServerSQL Server prior to SQL Server 2016 (13.x)SQL Server 2016 (13.x) are now enabled by default. avec le niveau de compatibilité 130.With compatibility mode 130. L’indicateur de trace 4199 est toujours applicable aux correctifs de l’optimiseur de requête qui ont été publiés après la publication de SQL Server 2016 (13.x)SQL Server 2016 (13.x).Trace flag 4199 will still be applicable for new query optimizer fixes that are released after SQL Server 2016 (13.x)SQL Server 2016 (13.x). Pour utiliser l’ancien optimiseur de requête de SQL DatabaseSQL Database, vous devez sélectionner le niveau de compatibilité 110.To use the older query optimizer in SQL DatabaseSQL 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 2014 (12.x)SQL Server 2014 (12.x) comprend d’importantes améliorations au niveau du 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 la base de données sur 110 en raison de problèmes de performances, consultez les recommandations de la section Plans de requête, dans la rubrique SQL Server 2014 (12.x)SQL Server 2014 (12.x) Nouveautés du moteur de base de données.Before setting database compatibility level to 110 because of performance issues, see the recommendations in the Query Plans section of the SQL Server 2014 (12.x)SQL Server 2014 (12.x) What's New in Database Engine topic.
Dans les niveaux de compatibilité inférieurs à 120, le paramètre de langue est ignoré lors de la conversion d’une valeur de date en 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 ne s’applique qu’au type date.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 est pris en compte lors de la conversion d’une valeur de date en 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 à 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. L’exemple C de la section Exemples ci-dessous illustre ce comportement.Example C in the Examples section below demonstrates this behavior. Les références récursives d’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.
L’expression de table commune récursive permet les noms de colonnes en double.Recursive common table expression (CTE) allows duplicate column names. Les expressions CTE récursives n'autorisent pas les noms de colonnes en double.Recursive CTE does 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 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. Vous ne pouvez pas insérer de valeurs explicites dans une colonne d’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 la 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 et non celui 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.
Une instruction SELECT INTO crée toujours une opération d'insertion monothread.A SELECT INTO statement always creates a single-threaded insert operation. Une instruction SELECT INTO 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 number of rows, the parallel operation can improve performance.

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

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 aux niveaux de compatibilité au-dessus de 110.This section also applies to compatibility levels above 110.

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 Intégration du CLR - Nouveautés.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 string-length et substring comptent 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 string-length et substring comptent chaque caractère de substitution comme un seul 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 2012 (11.x)SQL Server 2012 (11.x), le matériel chiffré à l’aide de RC4 ou de RC4_128 peut être déchiffré avec n’importe quel niveau de compatibilité.(Not recommended.) In SQL Server 2012 (11.x)SQL Server 2012 (11.x), 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 2012 (11.x)SQL Server 2012 (11.x), le matériel chiffré à l’aide de RC4 ou de RC4_128 peut être déchiffré avec n’importe quel niveau de compatibilité.In SQL Server 2012 (11.x)SQL Server 2012 (11.x), material encrypted using RC4 or RC4_128 can be decrypted in any compatibility level.
Le style par défaut des opérations CAST et CONVERT effectuées 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.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.

L’exemple D de la section Exemples ci-dessous montre les différences 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.For more information about date and time styles, see CAST and CONVERT.
Lorsque le niveau de compatibilité est 110, le style par défaut pour les opérations CAST et CONVERT effectuées sur les types de données time et datetime2 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 tant que 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 de 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 tant que 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 de 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 remplaçant le type de données dans la table distante par datetime ou en définissant le niveau de compatibilité de la base de données locale sur 100 (ou valeur 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) Les lettres H et W majuscules sont ignorées lors de la séparation de deux consonnes qui portent 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 portent le même numéro dans le code SOUNDEX, ils sont tous les deux inclus.2) If the first 2 characters of character_expression have the same number in the SOUNDEX code, both characters are included. Sinon, si plusieurs consonnes côte à côte portent 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 the 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 un H ou un W majuscule sépare deux consonnes qui portent le même numéro dans le code SOUNDEX, la consonne située à 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 plusieurs consonnes côte à côte portent le même numéro dans le code SOUNDEX, toutes sont exclues à l’exception de la première.2) If a set of side-by-side consonants have the 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 avec les anciens niveaux de compatibilité.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é à regénérer 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.For more information, see SOUNDEX.

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 altérez une fonction de partition, les littéraux datetime et smalldatetime de la fonction sont évalués en supposant que US_English (Anglais États-Unis) est le 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 les littéraux datetime et smalldatetime 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
CREATE FULLTEXT STOPLIST, ALTER FULLTEXT STOPLIST et DROP FULLTEXT STOPLIST ne sont pas pris 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. CREATE FULLTEXT STOPLIST, ALTER FULLTEXT STOPLIST et DROP FULLTEXT STOPLIST sont pris en charge.CREATE FULLTEXT STOPLIST, ALTER FULLTEXT STOPLIST, and DROP FULLTEXT STOPLIST are supported. FaibleLow
MERGE n’est pas appliqué comme un 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 avec les niveaux de compatibilité 100 et 90.The MERGE statement is supported under both 100 and 90 compatibility levels. FaibleLow
L’utilisation de l’argument <dml_table_source> de l’instruction INSERT entraîne 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 s’effectue en utilisant l’argument <dml_table_source> de l’instruction INSERT.This is done using the <dml_table_source> argument of the INSERT statement. FaibleLow
Sauf si NOINDEX est spécifié, DBCC CHECKDB ou DBCC CHECKTABLE effectue les vérifications de la cohérence physique et logique sur une table ou une vue indexée, ainsi que 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. Sauf si NOINDEX est spécifié, DBCC CHECKDB ou DBCC CHECKTABLE effectue les vérifications de la cohérence physique et logique sur une table, ainsi que sur tous ses index non-cluster.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 NOINDEX est également spécifié, 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 d’abandon d’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 mettent fin au 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és réservés dans la clause GROUP BY.CUBE and ROLLUP are reserved keywords within the GROUP BY clause. FaibleLow
La validation stricte est appliquée aux éléments du type XML anyType.Strict validation is applied to elements of the XML anyType type. La validation souple (lax) est appliquée aux éléments du type anyType.Lax validation is applied to elements of the anyType type. Pour plus d’informations, consultez Composants génériques et validation de contenu.For more information, see Wildcard Components and Content Validation. FaibleLow
Les attributs spéciaux xsi:nil et xsi:type ne peuvent 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 les attributs xsi:nil et xsi:type.This means that /e/@xsi:nil fails while /e/@* ignores the xsi:nil and xsi:type attributes. 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".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 peuvent être interrogés et modifiés.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 @* par @*[namespace-uri(.) != "insert xsi namespace uri" et pas (local-name(.) = "type" ou local-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, à l’aide d’une affectation bidirectionnelle telle que UPDATE T1 SET @v = column_name = <expression>, peut produire des résultats inattendus car la valeur dynamique de la variable peut être utilisée dans d’autres clauses, telles que les clauses WHERE et ON, pendant l’exécution de l’instruction au lieu 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 (year, '2007/05-30') est compilé correctement.For example, SELECT DATEPART (year, '2007/05-30') compiles successfully. Les intrinsèques datetime tels que DATEPART nécessitent 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 À déterminer.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 crochets ( [] ) ou entre guillemets ( "" ). Par exemple, pour effectuer la mise à niveau d’une application qui utilise l’identificateur EXTERNAL vers le niveau de compatibilité 90, vous pouvez remplacer l’identificateur par [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.For more information, see Reserved Keywords.

AutorisationsPermissions

Requiert 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 remplace le niveau de compatibilité de la base de données AdventureWorks2012AdventureWorks2012 par 110,SQL Server 2012 (11.x)SQL Server 2012 (11.x).The following example changes the compatibility level of the AdventureWorks2012AdventureWorks2012 database to 110,SQL Server 2012 (11.x)SQL Server 2012 (11.x).

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. Instruction SET LANGUAGE non prise en compte, sauf avec le niveau de compatibilité 120Ignoring the SET LANGUAGE statement except under compatibility level 120

La requête suivante ignore l’instruction SET LANGUAGE, sauf avec 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 un paramètre de compatibilité de 110 ou inférieur, les références récursives dans la partie droite d’une clause EXCEPT créent une boucle infinieFor 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. Différence entre les styles 0 et 121The difference between styles 0 and 121

Pour plus d’informations sur les styles de date et d’heure, consultez CAST et CONVERT.For more information about date and time styles, see CAST and CONVERT.

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. Attribution de variable - opérateur UNION de niveau supérieurVariable assignment - top-level UNION operator

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 = 110;
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.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

Certification de compatibilité Compatibility Certification
ALTER DATABASE ALTER DATABASE
Mots clés réservés Reserved Keywords
CREATE DATABASE CREATE DATABASE
DATABASEPROPERTYEX DATABASEPROPERTYEX
sys.databases sys.databases
sys.database_files sys.database_files
Afficher ou modifier le niveau de compatibilité d’une base de données View or Change the Compatibility Level of a Database
Changer le mode de compatibilité de la base de données et utiliser le magasin des requêtes Change the Database Compatibility Mode and use the Query Store
Mise à niveau des bases de données à l’aide de l’Assistant Paramétrage de requêteUpgrading Databases by using the Query Tuning Assistant