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

S’APPLIQUE À : ouiSQL Server (à partir de 2008) ouiAzure SQL Database nonAzure SQL Data Warehouse nonParallel Data Warehouse APPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database noAzure 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).

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_namedatabase_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éCompatibility Level Designation Valeurs de niveau de compatibilité prises en chargeSupported Compatibility Level Values
Version préliminaire de SQL Server 2019SQL Server 2019 preview 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
Serveur logique Azure SQL DatabaseAzure SQL Database Azure SQL DatabaseAzure SQL Database logical server 1212 130130 150, 140, 130, 120, 110, 100150, 140, 130, 120, 110, 100
Azure SQL DatabaseAzure SQL Database Managed InstanceManaged Instance 1212 130130 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 2005SQL Server 2005 99 9090 90, 8090, 80
SQL Server 2000SQL Server 2000 88 8080 8080

Note

À 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. Nous ne mettons pas à jour le niveau de compatibilité pour les bases de données existantes.We do not update database compatibility level for existing databases. Il incombe aux clients de le faire à leur convenance.This is up to customers to do at their own discretion. Cela étant dit, nous recommandons vivement aux clients d’envisager de passer au dernier niveau de compatibilité afin de tirer parti des dernières améliorations apportées.With that said, we highly recommend customers plan on moving to the latest compatibility level in order to leverage the latest improvements.

Si vous souhaitez tirer parti du niveau de compatibilité de base de données 140 pour votre base de données dans son ensemble, mais que vous avez des raisons de préférer 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 (Transact-SQL) et en particulier son mot clé LEGACY_CARDINALITY_ESTIMATION = ON.If you want to leverage database compatibility level 140 for your database overall, but you have reason to prefer the cardinality estimation model of SQL Server 2012 (11.x)SQL Server 2012 (11.x), mapping to database compatibility level 110, see ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL), and in particular its keyword LEGACY_CARDINALITY_ESTIMATION = ON.

Pour savoir comment comparer les performances de requêtes utilisant deux niveaux de compatibilité différents dans Azure SQL DatabaseAzure SQL Database, consultez Amélioration des performances de requête 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 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 pour 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 moves to 140 for 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é.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

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 (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 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 bases de données, sauf si la base de données model a un niveau de compatibilité inférieur.Databases are set to this level unless the model database has a lower compatibility level. Quand une base de données est mise à niveau à 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.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 d’une base de données ayant un niveau de compatibilité inférieur à celui autorisé a pour effet de lui attribuer automatiquement le niveau de compatibilité autorisé le plus bas.Upgrading a database with a compatibility level lower than the allowed level, 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 databases sont définis sur le niveau de compatibilité actuel après la mise à niveau.The compatibility levels of the tempdb, model, msdb and Resource databases are set to the current compatibility level after upgrade.
  • 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.

Note

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.

Niveaux de compatibilité et mises à niveau SQL ServerCompatibility Levels and SQL Server 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. 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 la section Utilisation du niveau de compatibilité pour la compatibilité descendante plus loin dans cet article.For more information on using compatibility level for backward compatibility, see the Using Compatibility Level for Backward Compatibility later in this article.

Pour un nouveau travail de développement ou quand une application existante exige l’utilisation de nouvelles fonctionnalités ou encore que des améliorations sont apportées à l’espace de l’optimiseur de requête en termes de performances, envisagez de mettre à niveau le niveau de compatibilité de base de données vers le dernier disponible dans SQL ServerSQL Server, puis vérifiez que votre application fonctionne avec ce niveau de compatibilité.For new development work, or when an existing application requires use of new features, as well as performance improvements done in the query optimizer space, plan to upgrade the database compatibility level to the latest available in SQL ServerSQL Server, and certify your application to work with that compatibility level. Pour plus d’informations sur la mise à niveau du niveau de compatibilité de base de données, consultez la section Bonnes pratiques pour la mise à niveau du niveau de compatibilité de base de données plus loin dans cet article.For more details on upgrading the database compatibility level, see the Best Practices for upgrading Database Compatibility Level later in the article.

Conseil

Si une application a été testée et certifiée sur une version donnée de SQL ServerSQL Server, cela signifie qu’elle a été implicitement testée et certifiée sur le niveau de compatibilité de base de données natif de cette version de SQL ServerSQL Server.If an application was tested and certified on a given SQL ServerSQL Server version, then it was implicitly tested and certified on that SQL ServerSQL Server version native database compatibility level.

Par conséquent, le niveau de compatibilité de base de données offre un chemin d’accès de certification facile pour une application existante quand le niveau de compatibilité de base de données utilisé correspond à celui de la version testée de SQL ServerSQL Server.So, database compatibility level provides an easy certification path for an existing application, when using the database compatibility level corresponding to the tested SQL ServerSQL Server version.

Pour plus d’informations sur les différences entre les niveaux de compatibilité, consultez les sections appropriées plus loin dans cet article.For more information about differences between compatibility levels, see the appropriate sections later in this article.

Pour mettre à niveau le Moteur de base de données SQL ServerSQL Server Database Engine vers la dernière version tout en conservant le niveau de compatibilité de base de données qui existait avant la mise à niveau et son état de capacité de prise en charge, il est recommandé de procéder à une validation de la surface d’exposition fonctionnelle statique du code d’application dans la base de données en utilisant l’outil Assistant Migration de données Microsoft (DMA).To upgrade the Moteur de base de données SQL ServerSQL Server Database Engine to the latest version, while maintaining the database compatibility level that existed before the upgrade and its supportability status, it is recommended to perform static functional surface area validation of the application code in the database, by using the Microsoft Data Migration Assistant tool (DMA). L’absence d’erreurs dans la sortie de l’outil DMA liées à l’absence ou à l’incompatibilité de fonctionnalités protège l’application contre des régressions fonctionnelles dans la nouvelle version cible.The absence of errors in the DMA tool output, about missing or incompatible functionality, protects application from any functional regressions on the new target version. Pour plus d’informations sur l’outil DMA, consultez cet article.For more information on the DMA tool, see here.

Note

DMA prend en charge le niveau de compatibilité de base de données 100 et supérieur.DMA supports database compatibility level 100 and above. L’utilisation de SQL Server 2005SQL Server 2005 en tant que version source est exclue. SQL Server 2005SQL Server 2005 as source version is excluded.

Important

Microsoft recommande de procéder à un test minime de façon à vérifier que la mise à niveau réussit tout en conservant le niveau de compatibilité de base de données précédent.Microsoft recommends that some minimal testing is done to validate the success of an upgrade, while maintaining the previous database compatibility level. Il vous appartient de déterminer ce à quoi correspond un test minime pour vos propres application et scénario.You should determine what minimal testing means for your own application and scenario.

Note

Microsoft assure une protection de la forme du plan de requête quand :Microsoft provides query plan shape protection when:

  • La nouvelle version (cible) de SQL ServerSQL Server s’exécute sur du matériel comparable à celui sur lequel la précédente version (source) SQL ServerSQL Server s’exécutait.The new SQL ServerSQL Server version (target) runs on hardware that is comparable to the hardware where the previous SQL ServerSQL Server version (source) was running.
  • Le même niveau de compatibilité de base de données pris en charge est utilisé sur la version cible de SQL ServerSQL Server et sur la version source de SQL ServerSQL Server.The same supported database compatibility level is used both at the target SQL ServerSQL Server and source SQL ServerSQL Server.

Toute régression de la forme du plan de requête (par rapport à la version source de SQL ServerSQL Server) qui se produit dans les conditions précédentes sera traitée.Any query plan shape regression (as compared to the source SQL ServerSQL Server) that occurs in the above conditions will be addressed. Contactez le Support technique Microsoft si c’est le cas.Please contact Microsoft Customer Support if this is the case.

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

Le paramètre de niveau de compatibilité de base de données affecte uniquement les comportements de la base de données spécifiée et non ceux du serveur tout entier.The database compatibility level setting affects behaviors only for the specified database, not for the entire server. Le niveau de compatibilité de base de données n’assure qu’une compatibilité descendante partielle avec les versions antérieures de SQL ServerSQL Server.Database compatibility level provides only partial backward compatibility with earlier versions of SQL ServerSQL Server.

Conseil

Le niveau de compatibilité de la base de données étant un paramètre de niveau base de données, une application exécutée sur un Moteur de base de données SQL ServerSQL Server Database Engine plus récent que le niveau de compatibilité de la base de données utilisé peut quand même tirer parti des améliorations au niveau du serveur sans qu’aucune modification de l’application soit requise.Because database compatibility level is a database-level setting, an application running on a newer Moteur de base de données SQL ServerSQL Server Database Engine while using an older database compatibility level, can still leverage server-level enhancements without any requirement for application changes.

Certaines de ces améliorations concernent le monitoring et la résolution des problèmes, avec de nouvelles Vues de gestion dynamique du système et de nouveaux Événements étendus.These include rich monitoring and troubleshooting improvements, with new System Dynamic Management Views and Extended Events. Elles développent également l’évolutivité, par exemple avec Soft-NUMA automatique.And also improved scalability, for example with Automatic Soft-NUMA .

À 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.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 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, ainsi que des améliorations de performances apportées à l’espace de l’optimiseur de requête, mais cette opération doit être effectuée de façon contrôlée.From an application perspective, 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, as well as performance improvements done in the query optimizer space, but to do so in a controlled way. Pour une migration plus sûre, utilisez le niveau de compatibilité le plus bas 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é.Use the lower compatibility level as a safer migration aid to work around version differences, in the behaviors that are controlled by the relevant compatibility level setting. Pour plus d’informations, notamment sur le flux de travail recommandée pour la mise à niveau du niveau de compatibilité de base de données, consultez la section Bonnes pratiques pour la mise à niveau du niveau de compatibilité de base de données plus loin dans cet article.For more details, including the recommended workflow for upgrading database compatibility level, see the Best Practices for upgrading Database Compatibility Level later in the article.

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 les fonctionnalités obsolètes, consultez Fonctionnalités du moteur de base de données supprimées dans SQL Server 2016, Fonctionnalités du moteur de base de données supprimées dans SQL Server 2014), Fonctionnalités du moteur de base de données supprimées dans SQL Server 2012) et Fonctionnalités du moteur de base de données supprimées dans SQL Server 2008).For more information on discontinued functionality, see Discontinued Database Engine Functionality in SQL Server 2016, Discontinued Database Engine Functionality in SQL Server 2014), Discontinued Database Engine Functionality in SQL Server 2012), and Discontinued Database Engine Functionality in SQL Server 2008).

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 'AdventureWorks2016CTP3', '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 'AdventureWorks2016CTP3', '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), Changements importants dans les fonctionnalités du moteur de base de données de SQL Server 2012) et Changements importants dans les fonctionnalités du moteur de base de données de SQL Server 2008).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), Breaking Changes to Database Engine Features in SQL Server 2012), and Breaking Changes to Database Engine Features in SQL Server 2008).

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 flux de travail recommandé pour la mise à niveau du niveau de compatibilité, consultez Modifier le mode de compatibilité de 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.

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 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 Version préliminaire de SQL Server 2019SQL Server 2019 preview.Database compatibility level 150 is currently in Public Preview for Azure SQL DatabaseAzure SQL Database and Version préliminaire de SQL Server 2019SQL Server 2019 preview. 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.

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 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 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 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 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 (Transact-SQL).For more information about date and time styles, see CAST and CONVERT (Transact-SQL).
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 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 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 (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 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 (Transact-SQL).For more information, see Reserved Keywords (Transact-SQL).

PermissionsPermissions

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 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 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.

L’exemple suivant montre les différences 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 = 110;  
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