ALTER DATABASE-Kompatibilitätsgrad (Transact-SQL)ALTER DATABASE (Transact-SQL) Compatibility Level

Gilt für: JaSQL Server JaAzure SQL-Datenbank NeinAzure Synapse Analytics (SQL DW) NeinParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Legt für Transact-SQLTransact-SQL und Verhalten bei der Abfrageverarbeitung fest, dass sie mit der angegebenen Version der SQL-Engine kompatibel sein müssen.Sets Transact-SQLTransact-SQL and query processing behaviors to be compatible with the specified version of the SQL engine. Informationen zu anderen ALTER DATABASE-Optionen finden Sie unter ALTER DATABASE.For other ALTER DATABASE options, see ALTER DATABASE.

Weitere Informationen zu Syntaxkonventionen finden Sie unter Transact-SQL-Syntaxkonventionen.For more information about the syntax conventions, see Transact-SQL Syntax Conventions.

SyntaxSyntax

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

ArgumenteArguments

database_name Der Name der Datenbank, die geändert werden soll.database_name Is the name of the database to be modified.

COMPATIBILITY_LEVEL {150 | 140 | 130 | 120 | 110 | 100 | 90 | 80} Die Version von SQL ServerSQL Server, mit der die Datenbank kompatibel gemacht werden soll.COMPATIBILITY_LEVEL { 150 | 140 | 130 | 120 | 110 | 100 | 90 | 80 } Is the version of SQL ServerSQL Server with which the database is to be made compatible. Die folgenden Kompatibilitätsgradwerte können konfiguriert werden (nicht alle Versionen unterstützen alle oben genannten Kompatibilitätsgrade):The following compatibility level values can be configured (not all versions supports all of the above listed compatibility level):

ProductProduct Version der Datenbank-EngineDatabase Engine Version Bestimmung des Kompatibilitätsgrads mit StandardsDefault Compatibility Level Designation Unterstützte KompatibilitätsgradwerteSupported 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-DatenbankAzure SQL Database Singleton/Pool für elastische Datenbankensingle database/elastic pool 1212 150150 150, 140, 130, 120, 110, 100150, 140, 130, 120, 110, 100
Azure SQL-DatenbankAzure SQL Database verwaltete Instanzmanaged instance 1212 150150 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 2000 (8.x)SQL Server 2000 (8.x) 88 8080 8080

Wichtig

Die Versionsnummern der Datenbank-Engine für SQL Server und Azure SQL-Datenbank sind nicht miteinander vergleichbar, sondern sind interne Buildnummern für diese separaten Produkte.The database engine version numbers for SQL Server and Azure SQL Database are not comparable with each other, and rather are internal build numbers for these separate products. Die Datenbank-Engine für Azure SQL-Datenbank basiert auf der gleichen Codebasis wie die SQL Server-Datenbank-Engine.The database engine for Azure SQL Database is based on the same code base as the SQL Server database engine. Entscheidend ist dabei, dass die Datenbank-Engine in Azure SQL-Datenbank immer über die neuesten SQL-Datenbank-Engine-Bits verfügt.Most importantly, the database engine in Azure SQL Database always has the newest SQL database engine bits. Die Version 12 von Azure SQL-Datenbank ist neuer als die Version 15 von SQL Server.Version 12 of Azure SQL Database is newer than version 15 of SQL Server.

RemarksRemarks

Bei allen Installationen von SQL ServerSQL Server wird der Standardkompatibilitätsgrad von der Version von Datenbank-EngineDatabase Engine abgeleitet.For all installations of SQL ServerSQL Server, the default compatibility level is associated with the version of the Datenbank-EngineDatabase Engine. Neue Datenbanken sind auf diesen Grad festgelegt, sofern der Kompatibilitätsgrad der model-Datenbank nicht niedriger ist.New databases are set to this level unless the model database has a lower compatibility level. Wenn Datenbanken aus einer früheren Version von SQL ServerSQL Server angefügt oder wiederhergestellt werden, behält die Datenbank ihren vorhandenen Kompatibilitätsgrad, wenn es sich dabei um den zulässigen Mindestwert für die SQL ServerSQL Server-Instanz oder um einen höheren Wert handelt.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. Bei einem Upgrade einer Datenbank, deren Kompatibilitätsgrad unterhalb des von Datenbank-EngineDatabase Engine festgelegten zulässigen Grads liegt, wird die Datenbank automatisch auf den niedrigsten zulässigen Kompatibilitätsgrad festgelegt.Moving a database with a compatibility level lower than the allowed level by the Datenbank-EngineDatabase Engine, automatically sets the database to the lowest compatibility level allowed. Dies gilt sowohl für die System- als auch für die Benutzerdatenbanken.This applies to both system and user databases.

Die folgenden Verhaltensweisen werden für SQL Server 2017 (14.x)SQL Server 2017 (14.x) erwartet, wenn eine Datenbank angefügt oder wiederhergestellt wird, und werden nach einem direkten Upgrade erwartet: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:

  • War der Kompatibilitätsgrad einer Benutzerdatenbank vor dem Upgrade 100 oder höher, wird er nach dem Upgrade beibehalten.If the compatibility level of a user database was 100 or higher before the upgrade, it remains the same after upgrade.
  • War der Kompatibilitätsgrad einer Benutzerdatenbank vor dem Upgrade 90, wird er auf 100 gesetzt, was dem niedrigsten unterstützten Kompatibilitätsgrad in SQL Server 2017 (14.x)SQL Server 2017 (14.x) entspricht.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).
  • Der Kompatibilitätsgrad der Datenbanken „tempdb“, „model“, „msdb“ und „Resource“ wird auf den Standardkompatibilitätsgrad für eine bestimmte Datenbank-EngineDatabase Engine-Version festgelegt.The compatibility levels of the tempdb, model, msdb and Resource databases are set to the default compatibility level for a given Datenbank-EngineDatabase Engine version.
  • Die „master“-Systemdatenbank behält den Kompatibilitätsgrad von vor dem Upgrade bei.The master system database retains the compatibility level it had before upgrade.

Verwenden Sie ALTER DATABASE, um den Kompatibilitätsgrad der Datenbank zu ändern.Use ALTER DATABASE to change the compatibility level of the database. Die neue Kompatibilitätsgradeinstellung für eine Datenbank wird wirksam, wenn ein USE <database>-Befehl ausgegeben oder eine neue Anmeldung mit dieser Datenbank als Standarddatenbankkontext verarbeitet wird.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. Fragen Sie die Spalte compatibility_level in der Katalogsicht sys.databases ab, um den aktuellen Kompatibilitätsgrad einer Datenbank anzuzeigen.To view the current compatibility level of a database, query the compatibility_level column in the sys.databases catalog view.

Hinweis

Eine Verteilungsdatenbank, die in einer früheren Version von SQL ServerSQL Server erstellt wurde und auf SQL Server 2016 (13.x)SQL Server 2016 (13.x) RTM oder Service Pack 1 aktualisiert wurde, verfügt über einen Kompatibilitätsgrad von „90“, was für andere Datenbanken nicht unterstützt wird.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. Dies wirkt sich nicht auf die Funktionstüchtigkeit der Replikation aus.This does not have an impact on the functionality of replication. Ein Upgrade auf ein späteres Service Pack oder eine spätere Version von SQL ServerSQL Server führt dazu, dass der Kompatibilitätsgrad der Verteilungsdatenbank auf denjenigen der Masterdatenbank erhöht wird.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.

Hinweis

Seit November 2019 ist der Standardkompatibilitätsgrad für neu erstellte Datenbanken in Azure SQL-DatenbankAzure SQL Database gleich „150“.As of November 2019, in Azure SQL-DatenbankAzure SQL Database, the default compatibility level is 150 for newly created databases. MicrosoftMicrosoft passt bei vorhandenen Datenbanken den Datenbank-Kompatibilitätsgrad nicht an.does not update Database Compatibility Level for existing databases. Kunden können diesen nach Ihren eigenen Bedürfnissen anpassen.It is up to customers to do at their own discretion.
MicrosoftMicrosoft empfiehlt Kunden dringend, ein Upgrade auf den aktuellen Kompatibilitätsgrad durchzuführen, um von den neuesten Verbesserungen bei der Abfrageoptimierung profitieren zu können.highly recommends that customers plan to upgrade to the latest compatibility level in order to leverage the latest query optimization improvements.

Wenn Sie den Datenbank-Kompatibilitätsgrad 120 oder höher für Ihre gesamte Datenbank nutzen möchten, aber das Kardinalitätsschätzungsmodell von SQL Server 2012 (11.x)SQL Server 2012 (11.x) bevorzugen, sodass eine Zuordnung zum Datenbank-Kompatibilitätsgrad 110 erfolgt, sollten Sie die Dokumentation zur Anweisung ALTER DATABASE SCOPED CONFIGURATION und insbesondere den Abschnitt zu deren Schlüsselwort LEGACY_CARDINALITY_ESTIMATION = ON lesen.To leverage Database Compatibility Level 120 or higher 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.

Weitere Einzelheiten zur Bewertung der Leistungsunterschiede bei Ihren wichtigsten Abfragen zwischen zwei Kompatibilitätsgraden in Azure SQL-DatenbankAzure SQL Database finden Sie unter Verbesserte Abfrageleistung bei Kompatibilitätsgrad 130 in Azure SQL-Datenbank.For details about how to assess the performance differences of your most important queries, between two different compatibility levels on Azure SQL-DatenbankAzure SQL Database, see Improved Query Performance with Compatibility Level 130 in Azure SQL Database. Beachten Sie, dass dieser Artikel sich auf den Kompatibilitätsgrad 130 und SQL ServerSQL Server bezieht. Es gelten jedoch die gleichen Vorgehensweisen für Upgrades auf den Kompatibilitätsgrad 140 oder höher in SQL ServerSQL Server und Azure SQL-DatenbankAzure SQL Database.Note that this article refers to compatibility level 130 and SQL ServerSQL Server, but the same methodology applies for upgrades to 140 or higher levels in SQL ServerSQL Server and Azure SQL-DatenbankAzure SQL Database.

Führen Sie die folgende Abfrage aus, um die Datenbank-EngineDatabase Engine-Version zu bestimmen, mit der Sie verbunden sind.To determine the version of the Datenbank-EngineDatabase Engine that you are connected to, execute the following query.

SELECT SERVERPROPERTY('ProductVersion');

Hinweis

Azure SQL-DatenbankAzure SQL Database unterstützt nicht alle Features, die nach Kompatibilitätsgrad variieren.Not all features that vary by compatibility level are supported on Azure SQL-DatenbankAzure SQL Database.

Führen Sie eine Abfrage für die Spalte compatibility_level von sys.databases aus, um die aktuellen Kompatibilitätsgrad zu ermitteln.To determine the current compatibility level, query the compatibility_level column of sys.databases.

SELECT name, compatibility_level FROM sys.databases;

Kompatibilitätsgrade und Upgrades der Datenbank-EngineCompatibility levels and Database Engine upgrades

Der Datenbank-Kompatibilitätsgrad ist ein wichtiges Tool zur Unterstützung der Datenbankmodernisierung, denn damit können Upgrades für SQL Server-Datenbank-EngineSQL Server Database Engine durchgeführt werden, während der funktionale Status von anbindenden Anwendungen erhalten bleibt, indem der vor einem Upgrade wirksame Kompatibilitätsgrad beibehalten wird.Database Compatibility Level is a valuable tool to assist in database modernization, by allowing the SQL Server-Datenbank-EngineSQL Server Database Engine to be upgraded, while keeping connecting applications functional status by maintaining the same pre-upgrade Database Compatibility Level. Für eine ältere Version von SQL ServerSQL Server (z. B. SQL Server 2008SQL Server 2008) kann daher ein Upgrade auf SQL ServerSQL Server oder Azure SQL-DatenbankAzure SQL Database (einschließlich verwalteter Instanzen) durchgeführt werden, ohne dass Änderungen an Anwendungen (mit Ausnahme von Datenbankverbindungen) erforderlich sind.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 ServerSQL Server or Azure SQL-DatenbankAzure SQL Database (including Managed Instance) with no application changes (except for database connectivity). Weitere Informationen finden Sie unter Kompatibilitätszertifizierung.For more information, see Compatibility Certification.

Solange für die jeweilige Anwendung keine Verbesserungen genutzt werden müssen, die nur in einem höheren Datenbank-Kompatibilitätsgrad verfügbar sind, ist dieser Ansatz zum Durchführen eines Upgrades für SQL Server-Datenbank-EngineSQL Server Database Engine und zum Beibehalten des vorherigen Datenbank-Kompatibilitätsgrads geeignet.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 SQL Server-Datenbank-EngineSQL Server Database Engine and maintain the previous Database Compatibility Level. Weitere Informationen zum Verwenden eines Kompatibilitätsgrads für Abwärtskompatibilität finden Sie unter Kompatibilitätszertifizierung.For more information on using compatibility level for backward compatibility, see Compatibility Certification.

Bewährte Methoden zum Aktualisieren des Datenbank-KompatibilitätsgradsBest Practices for upgrading Database Compatibility Level

Den empfohlenen Workflow für ein Upgrade des Kompatibilitätsgrads finden Sie unter Ändern des Datenbank-Kompatibilitätsmodus und Verwenden des Abfragespeichers.For the recommended workflow for upgrading the compatibility level, see Change the Database Compatibility Mode and use the Query Store. Unterstützung beim Upgrade des Datenbank-Kompatibilitätsgrads finden Sie außerdem unter Aktualisieren von Datenbanken mit dem Abfrageoptimierung-Assistenten.Additionally, for an assisted experience with upgrading the Database Compatibility Level, see Upgrading Databases by using the Query Tuning Assistant.

Kompatibilitätsgrade und gespeicherte ProzedurenCompatibility Levels and Stored Procedures

Wenn eine gespeicherte Prozedur ausgeführt wird, verwendet sie den aktuellen Kompatibilitätsgrad der Datenbank, in der sie definiert ist.When a stored procedure executes, it uses the current compatibility level of the database in which it is defined. Wenn die Kompatibilitätseinstellung einer Datenbank geändert wird, werden alle zugehörigen gespeicherten Prozeduren automatisch entsprechend neu kompiliert.When the compatibility setting of a database is changed, all of its stored procedures are automatically recompiled accordingly.

Verwenden des Kompatibilitätsgrads für AbwärtskompatibilitätUsing compatibility level for backward compatibility

Die Einstellung Datenbank-Kompatibilitätsgrad bietet Abwärtskompatibilität mit früheren Versionen von SQL ServerSQL Server in Bezug auf das Verhalten von Transact-SQLTransact-SQL und der Abfrageoptimierung. Dies gilt allerdings ausschließlich für die angegebene Datenbank und nicht für den gesamten Server.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.

Beginnend mit dem Kompatibilitätsmodus 130 wurden alle neuen Fixes und Features, die Auswirkungen auf einen Abfrageplan haben, ausdrücklich nur zum neuen Kompatibilitätsmodus hinzugefügt.Starting with compatibility mode 130, any new query plan affecting fixes and features have been intentionally added only to the new compatibility level. Dadurch sollte das Risiko während der Upgrades minimiert werden, die durch Leistungseinbußen aufgrund von Abfrageplanänderungen entstanden sind, die möglicherweise auf neue Verhaltensweisen der Abfrageoptimierung zurückgeführt werden können.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.

Verwenden Sie für Anwendungen den niedrigeren Kompatibilitätsgrad als sichereren Migrationspfad, um versionsbedingte Unterschiede in den Verhalten zu umgehen, die über die jeweilige Einstellung für den Kompatibilitätsgrad gesteuert werden.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. Das Ziel sollte weiterhin darin bestehen, zu einem späteren Zeitpunkt ein Upgrade auf den neuesten Kompatibilitätsgrad durchzuführen, damit einige der neuen Features wie die intelligente Abfrageverarbeitung auf kontrollierte Weise übernommen werden können.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.

Ausführlichere Informationen einschließlich des empfohlenen Workflows für ein Upgrade des Datenbank-Kompatibilitätsgrads finden Sie unter Bewährte Methoden zum Aktualisieren des Datenbank-Kompatibilitätsgrads.For more details, including the recommended workflow for upgrading Database Compatibility Level, see Best Practices for upgrading Database Compatibility Level.

Wichtig

Nicht mehr unterstützte Funktionen, die in einer bestimmten SQL ServerSQL Server-Version eingeführt wurden, werden durch den Kompatibilitätsgrad nicht geschützt.Discontinued functionality introduced in a given SQL ServerSQL Server version is not protected by compatibility level. Dies bezieht sich auf Funktionalität, die aus der SQL Server-Datenbank-EngineSQL Server Database Engine entfernt wurde.This refers to functionality that was removed from the SQL Server-Datenbank-EngineSQL Server Database Engine. Der FASTFIRSTROW-Hinweis wurde beispielweise in SQL Server 2012 (11.x)SQL Server 2012 (11.x) nicht mehr unterstützt und durch den OPTION (FAST n )-Hinweis ersetzt.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. Wenn der Datenbank-Kompatibilitätsgrad auf 110 festgelegt wird, wird der nicht mehr unterstützte Hinweis nicht wiederhergestellt.Setting the Database Compatibility Level to 110 will not restore the discontinued hint.

Weitere Informationen zu nicht mehr unterstützten Funktionen finden Sie unter Nicht mehr unterstützte Datenbank-Engine-Funktionalität in SQL Server 2016, Nicht mehr unterstützte Datenbank-Engine-Funktionalität in SQL Server 2014 und Nicht mehr unterstützte Datenbank-Engine-Funktionalität in 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.

Wichtig

Breaking Changes, die in einer bestimmten SQL ServerSQL Server-Version eingeführt wurden, werden möglicherweise nicht durch den Kompatibilitätsgrad geschützt.Breaking changes introduced in a given SQL ServerSQL Server version may not be protected by compatibility level. Dies bezieht sich auf Verhaltensänderungen zwischen Versionen der SQL Server-Datenbank-EngineSQL Server Database Engine.This refers to behavior changes between versions of the SQL Server-Datenbank-EngineSQL Server Database Engine. Das Verhalten von Transact-SQLTransact-SQL wird normalerweise durch den Kompatibilitätsgrad geschützt.Transact-SQLTransact-SQL behavior is usually protected by compatibility level. Geänderte oder entfernte Systemobjekte werden jedoch nicht durch den Kompatibilitätsgrad geschützt.However, changed or removed system objects are not protected by compatibility level.

Ein Beispiel für eine wichtige Änderung, die durch den Kompatibilitätsgrad geschützt wird, ist eine implizite Konvertierung vom Datentyp „DateTime“ in den Datentyp „DateTime2“.An example of a breaking change protected by compatibility level is an implicit conversion from datetime to datetime2 data types. Unter dem Datenbank-Kompatibilitätsgrad 130 ergibt sich daraus eine verbesserte Genauigkeit, indem die Bruchteile von Millisekunden berücksichtigt werden, wodurch sich unterschiedliche konvertierte Werte ergeben.Under Database Compatibility Level 130, these show improved accuracy by accounting for the fractional milliseconds, resulting in different converted values. Legen Sie zum Wiederherstellen des vorherigen Konvertierungsverhaltens den Datenbank-Kompatibilitätsgrad auf 120 oder niedriger fest.To restore previous conversion behavior, set the Database Compatibility Level to 120 or lower.

Zu Beispielen für wichtige Änderungen, die nicht durch den Kompatibilitätsgrad geschützt sind, zählen die folgenden:Examples of breaking changes not protected by compatibility level are:

  • Geänderte Spaltennamen in Systemobjekten.Changed column names in system objects. In SQL Server 2012 (11.x)SQL Server 2012 (11.x) wurde die Spalte single_pages_kb in sys.dm_os_sys_info in pages_kb umbenannt.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. Unabhängig vom Kompatibilitätsgrad erzeugt die Abfrage SELECT single_pages_kb FROM sys.dm_os_sys_info den Fehler 207 (ungültiger Spaltenname).Regardless of the compatibility level, the query SELECT single_pages_kb FROM sys.dm_os_sys_info will produce error 207 (Invalid column name).
  • Entfernte Systemobjekte.Removed system objects. In SQL Server 2012 (11.x)SQL Server 2012 (11.x) wurde sp_dboption entfernt.In SQL Server 2012 (11.x)SQL Server 2012 (11.x) the sp_dboption was removed. Unabhängig vom Kompatibilitätsgrad erzeugt die Anweisung EXEC sp_dboption 'AdventureWorks2016', 'autoshrink', 'FALSE'; den Fehler 2812 (gespeicherte Prozedur „sp_dboption“ konnte nicht gefunden werden).Regardless of the compatibility level, the statement EXEC sp_dboption 'AdventureWorks2016', 'autoshrink', 'FALSE'; will produce error 2812 (Could not find stored procedure 'sp_dboption').

Weitere Informationen zu wichtigen Änderungen finden Sie unter Wichtige Änderungen für Datenbank-Engine-Features in SQL Server 2017, Wichtige Änderungen für Datenbank-Engine-Features in SQL Server 2016, Wichtige Änderungen für Datenbank-Engine-Features in SQL Server 2014 und Wichtige Änderungen für Datenbank-Engine-Features in 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.

Unterschiede zwischen KompatibilitätsgradenDifferences between Compatibility Levels

Bei allen Installationen von SQL ServerSQL Server wird der Standardkompatibilitätsgrad von der Version von Datenbank-EngineDatabase Engine abgeleitet. Dies wird in dieser Tabelle veranschaulicht.For all installations of SQL ServerSQL Server, the default compatibility level is associated with the version of the Datenbank-EngineDatabase Engine, as seen in this table. Planen Sie für neue Entwicklungsprojekte immer die Zertifizierung der Anwendungen auf den aktuellsten Datenbank-Kompatibilitätsgrad.For new development work, always plan to certify applications on the latest Database Compatibility Level.

Der Datenbank-Kompatibilitätsgrad bietet zudem Abwärtskompatibilität mit früheren Versionen von SQL ServerSQL Server, da angefügte oder aus älteren Versionen von SQL ServerSQL Server wiederhergestellte Datenbanken ihren vorhandenen Kompatibilitätsgrad beibehalten, sofern dieser dem mindestens zulässigen Kompatibilitätsgrad oder höher entspricht.But Database Compatibility Level also provides backward compatibility with earlier versions of SQL ServerSQL Server, because databases attached or restored from any earlier version of SQL ServerSQL Server retain their existing compatibility level (if same or higher than the minimum allowed compatibility level). Diese Vorgehensweise wurde im Abschnitt Verwenden des Kompatibilitätsgrads für Abwärtskompatibilität bereits erläutert.This was discussed in the Using compatibility level for backward compatibility section of this article.

Ab Datenbank-Kompatibilitätsgrad 130 werden alle neuen Fixes und Features, die sich auf Abfragepläne auswirken, nur zum aktuellsten Kompatibilitätsgrad hinzugefügt. Dieser wird auch als „Standardkompatibilitätsgrad“ bezeichnet.Starting with Database Compatibility Level 130, any new fixes and features affecting query plans have been added only to the latest compatibility level available, also called the default compatibility level. Dadurch sollte das Risiko während der Upgrades minimiert werden, die durch Leistungseinbußen aufgrund von Abfrageplanänderungen entstanden sind und möglicherweise auf neue Verhaltensweisen der Abfrageoptimierung zurückgeführt werden können.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.

Diese grundlegenden Änderungen, die sich auf den Plan auswirken, werden nur zum Standardkompatibilitätsgrad einer neuen Version von Datenbank-EngineDatabase Engine hinzugefügt:The fundamental plan-affecting changes added only to the default compatibility level of a new version of the Datenbank-EngineDatabase Engine are:

  1. Fixes für den Abfrageoptimierer, die für vorherige Versionen von SQL ServerSQL Server unter dem Ablaufverfolgungsflag 4199 veröffentlicht wurden, werden im Standardkompatibilitätsgrad einer neueren Version von SQL ServerSQL Server automatisch aktiviert.Query Optimizer fixes released for previous SQL ServerSQL Server versions under trace flag 4199 become automatically enabled in the default compatibility level of a newer SQL ServerSQL Server version. Gilt für: SQL ServerSQL Server (ab SQL Server 2016 (13.x)SQL Server 2016 (13.x)) und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x)) and Azure SQL-DatenbankAzure SQL Database.

    Als SQL Server 2016 (13.x)SQL Server 2016 (13.x) veröffentlicht wurde, wurden beispielsweise alle Fixes für den Abfrageoptimierer, die für vorherige Versionen von SQL ServerSQL Server (und die Kompatibilitätsgrade 100 bis 120) veröffentlicht wurden, automatisch für Datenbanken aktiviert, die den Standardkompatibilitätsgrad von SQL Server 2016 (13.x)SQL Server 2016 (13.x) (130) verwenden.For example, when SQL Server 2016 (13.x)SQL Server 2016 (13.x) was released, all the Query Optimizer fixes released for previous SQL ServerSQL Server versions (and respective compatibility levels 100 through 120) became automatically enabled for databases that use the SQL Server 2016 (13.x)SQL Server 2016 (13.x) default compatibility level (130). Nur Fixes für den Abfrageoptimierer, die für Versionen nach RTM gelten, müssen explizit aktiviert werden.Only post-RTM Query Optimizer fixes need to be explicitly enabled.

    Hinweis

    Sie können folgende Methoden verwenden, um Fixes für den Abfrageoptimierer zu aktivieren:To enable Query Optimizer fixes, you can use the following methods:

    Als SQL Server 2017 (14.x)SQL Server 2017 (14.x) dann veröffentlicht wurde, wurden alle Fixes für den Abfrageoptimierer, die nach SQL Server 2016 (13.x)SQL Server 2016 (13.x) RTM veröffentlicht wurden, automatisch für Datenbanken aktiviert, die den Standardkompatibilitätsgrad von SQL Server 2017 (14.x)SQL Server 2017 (14.x) (140) verwenden.Later, when SQL Server 2017 (14.x)SQL Server 2017 (14.x) was released, all the Query Optimizer fixes released after SQL Server 2016 (13.x)SQL Server 2016 (13.x) RTM became automatically enabled for databases using the SQL Server 2017 (14.x)SQL Server 2017 (14.x) default compatibility level (140). Dabei handelt es sich um kumulatives Verhalten, das auch alle früheren Versionen der Fixes enthält.This is a cumulative behavior that includes all previous versions fixes as well. Auch hier müssen nur Fixes für den Abfrageoptimierer, die für Post-RTM gelten, explizit aktiviert werden.Again, only post-RTM Query Optimizer fixes need to be explicitly enabled.

    In der folgenden Tabelle wird dieses Verhalten zusammengefasst:The following table summarizes this behavior:

    Version der Datenbank-EngineDatabase Engine (DE) version Datenbank-KompatibilitätsgradDatabase Compatibility Level Ablaufverfolgungsflag 4199TF 4199 Abfrageoptimierer-Änderungen aus früheren Datenbank-KompatibilitätsgradenQO changes from all previous Database Compatibility Levels Abfrageoptimierer-Änderungen für Versionen der Datenbank-Engine nach RTMQO changes for DE version post-RTM
    13 (SQL Server 2016 (13.x)SQL Server 2016 (13.x))13 (SQL Server 2016 (13.x)SQL Server 2016 (13.x)) 100 bis 120100 to 120


    130130
    OffOff
    OnOn

    OffOff
    OnOn
    DisabledDisabled
    AktiviertEnabled

    EnabledEnabled
    AktiviertEnabled
    DisabledDisabled
    AktiviertEnabled

    DisabledDisabled
    AktiviertEnabled
    14 (SQL Server 2017 (14.x)SQL Server 2017 (14.x))14 (SQL Server 2017 (14.x)SQL Server 2017 (14.x)) 100 bis 120100 to 120


    130130


    140140
    OffOff
    OnOn

    OffOff
    OnOn

    OffOff
    OnOn
    DisabledDisabled
    AktiviertEnabled

    EnabledEnabled
    AktiviertEnabled

    EnabledEnabled
    AktiviertEnabled
    DisabledDisabled
    AktiviertEnabled

    DisabledDisabled
    AktiviertEnabled

    DisabledDisabled
    AktiviertEnabled
    15 (SQL Server 2019 (15.x)SQL Server 2019 (15.x)) und 12 (Azure SQL-DatenbankAzure SQL Database)15 (SQL Server 2019 (15.x)SQL Server 2019 (15.x)) and 12 (Azure SQL-DatenbankAzure SQL Database) 100 bis 120100 to 120


    130 bis 140130 to 140


    150150
    OffOff
    OnOn

    OffOff
    OnOn

    OffOff
    OnOn
    DisabledDisabled
    AktiviertEnabled

    EnabledEnabled
    AktiviertEnabled

    EnabledEnabled
    AktiviertEnabled
    DisabledDisabled
    AktiviertEnabled

    DisabledDisabled
    AktiviertEnabled

    DisabledDisabled
    AktiviertEnabled

    Wichtig

    Fixes für den Abfrageoptimierer, die falsche Ergebnisse oder Fehler durch Zugriffsverletzungen beheben, werden nicht durch das Ablaufverfolgungsflag 4199 geschützt.Query Optimizer fixes that address wrong results or access violation errors are not protected by trace flag 4199. Diese Fixes sind nicht optional.Those fixes are not considered optional.

  2. Änderungen an der Kardinalitätsschätzung, die in SQL ServerSQL Server und Azure SQL-DatenbankAzure SQL Database veröffentlicht wurden, werden nur im Standardkompatibilitätsgrad einer neuen Version von Datenbank-EngineDatabase Engine , nicht jedoch in früheren Kompatibilitätsgraden veröffentlicht.Changes to the Cardinality Estimator released on SQL ServerSQL Server and Azure SQL-DatenbankAzure SQL Database are enabled only in the default compatibility level of a new Datenbank-EngineDatabase Engine version, but not on previous compatibility levels.

    Als SQL Server 2016 (13.x)SQL Server 2016 (13.x) veröffentlicht wurde, waren Änderungen an der Kardinalitätsschätzung beispielsweise nur für Datenbanken verfügbar, die den Standardkompatibilitätsgrad von SQL Server 2016 (13.x)SQL Server 2016 (13.x) (130) verwendet haben.For example, when SQL Server 2016 (13.x)SQL Server 2016 (13.x) was released, changes to the cardinality estimation process were available only for databases using SQL Server 2016 (13.x)SQL Server 2016 (13.x) default compatibility level (130). Für frühere Kompatibilitätsgrade wurde das Verhalten der Kardinalitätsschätzung beibehalten, das vor SQL Server 2016 (13.x)SQL Server 2016 (13.x) verfügbar war.Previous compatibility levels retained the cardinality estimation behavior that was available before SQL Server 2016 (13.x)SQL Server 2016 (13.x).

    Als SQL Server 2017 (14.x)SQL Server 2017 (14.x) später veröffentlicht wurde, waren neuere Änderungen an der Kardinalitätsschätzung beispielsweise nur für Datenbanken verfügbar, die den Standardkompatibilitätsgrad von SQL Server 2017 (14.x)SQL Server 2017 (14.x) (140) verwendet haben.Later, when SQL Server 2017 (14.x)SQL Server 2017 (14.x) was released, newer changes to the cardinality estimation process were available only for databases using SQL Server 2017 (14.x)SQL Server 2017 (14.x) default compatibility level (140). Für den Datenbank-Kompatibilitätsgrad 130 wurde das Verhalten der Kardinalitätsschätzung von SQL Server 2016 (13.x)SQL Server 2016 (13.x) beibehalten.Database Compatibility Level 130 retained the SQL Server 2016 (13.x)SQL Server 2016 (13.x) cardinality estimation behavior.

    In der folgenden Tabelle wird dieses Verhalten zusammengefasst:The following table summarizes this behavior:

    Version der Datenbank-EngineDatabase Engine version Datenbank-KompatibilitätsgradDatabase Compatibility Level Änderungen an neueren Versionen der KardinalitätsschätzungNew version CE changes
    13 (SQL Server 2016 (13.x)SQL Server 2016 (13.x))13 (SQL Server 2016 (13.x)SQL Server 2016 (13.x)) 130< 130
    130130
    DisabledDisabled
    AktiviertEnabled
    14 (SQL Server 2017 (14.x)SQL Server 2017 (14.x))114 (SQL Server 2017 (14.x)SQL Server 2017 (14.x))1 < 140< 140
    140140
    DisabledDisabled
    AktiviertEnabled
    15 (SQL Server 2019 (15.x)SQL Server 2019 (15.x))115 (SQL Server 2019 (15.x)SQL Server 2019 (15.x))1 < 150< 150
    150150
    DisabledDisabled
    AktiviertEnabled

    1 Gilt auch für Azure SQL-DatenbankAzure SQL Database1 Also applicable to Azure SQL-DatenbankAzure SQL Database.

Wichtig

Weitere Unterschiede zwischen den einzelnen Kompatibilitätsgraden werden in den nächsten Abschnitten dieses Artikels behandelt.Other differences between specific compatibility levels are available in the next sections of this article.

Unterschiede zwischen Kompatibilitätsgrad 140 und Kompatibilitätsgrad 150Differences between Compatibility Level 140 and Level 150

In diesem Abschnitt werden neue mit Kompatibilitätsgrad 150 eingeführte Verhaltensweisen beschrieben.This section describes new behaviors introduced with compatibility level 150.

Kompatibilitätsgradeinstellung 140 oder niedrigerCompatibility level setting of 140 or lower Kompatibilitätsgradeinstellung 150Compatibility level setting of 150
Relationale Data Warehouse- und Analyseworkloads können Columnstore-Indizes möglicherweise aufgrund des Mehraufwands für OLTP, fehlender Unterstützung durch den Hersteller oder anderer Einschränkungen nicht unten.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. Ohne Columnstore-Indizes können diese Workloads nicht vom Batchausführungsmodus profitieren.Without columnstore indexes, these workloads cannot benefit from batch execution mode. Der Batchausführungsmodus ist nun für Analyseworkloads verfügbar, ohne dass Columnstore-Indizes erforderlich sind.Batch execution mode is now available for analytic workloads without requiring columnstore indexes. Weitere Informationen finden Sie unter Batchmodus bei Rowstore.For more information, see batch mode on rowstore.
Abfragen im Zeilenmodus, die nicht genügend Speicherzuweisungen anfordern, was zu einem Überlauf auf Datenträger führt, haben möglicherweise weiterhin Probleme mit aufeinanderfolgenden Ausführungen.Row-mode queries that request insufficient memory grant sizes that result in spills to disk may continue to have issues on consecutive executions. Abfragen im Zeilenmodus, die nicht genügend Arbeitsspeicherzuweisungen anfordern, was zu einem Überlauf auf Datenträger führt, weisen bei aufeinanderfolgenden Ausführungen möglicherweise eine Leistungssteigerung auf.Row-mode queries that request insufficient memory grant sizes that result in spills to disk may have improved performance on consecutive executions. Weitere Informationen finden Sie unter Feedback zur Speicherzuweisung im Zeilenmodus.For more information, see row mode memory grant feedback.
Abfragen im Zeilenmodus, die eine übermäßige Speicherzuweisung anfordern, was zu Parallelitätsproblemen führt, haben möglicherweise weiterhin Probleme mit aufeinanderfolgenden Ausführungen.Row-mode queries that request an excessive memory grant size that results in concurrency issues may continue to have issues on consecutive executions. Abfragen im Batchmodus, die eine übermäßige Speicherzuweisung anfordern, was zu Parallelitätsproblemen führt, weisen bei aufeinanderfolgenden Ausführungen möglicherweise eine verbesserte Parallelität auf.Row-mode queries that request an excessive memory grant size that results in concurrency issues may have improved concurrency on consecutive executions. Weitere Informationen finden Sie unter Feedback zur Speicherzuweisung im Zeilenmodus.For more information, see row mode memory grant feedback.
Abfragen, die auf TSQL_SCALAR_UDFs verweisen, verwenden einen iterativen Aufruf, verursachen keine Kosten und erzwingen die serielle Ausführung.Queries referencing T-SQL scalar UDFs will use iterative invocation, lack costing and force serial execution. TSQL_SCALAR_UDFs werden in äquivalente relationale Ausdrücke transformiert, die per „Inlining“ durch die aufrufende Abfrage ersetzt werden, was oft zu erheblichen Leistungssteigerungen führt.T-SQL scalar UDFs are transformed into equivalent relational expressions that are “inlined” into the calling query, often resulting in significant performance gains. Weitere Informationen finden Sie unter TSQL_SCALAR_UDF_INLINING.For more information, see T-SQL scalar UDF inlining.
Tabellenvariablen nutzen für die Kardinalitätsschätzung eine festgelegte Schätzung.Table variables use a fixed guess for the cardinality estimate. Wenn die tatsächliche Anzahl der Zeilen sehr viel höher als der geschätzter Wert ist, kann die Leistung nachgelagerter Vorgänge beeinträchtigt werden.If the actual number of rows is much higher than the guessed value, performance of downstream operations can suffer. Neue Pläne verwenden anstelle einer festgelegten Schätzung die tatsächliche Kardinalität der Tabellenvariablen, die bei der ersten Kompilierung vorgefunden wird.New plans will use the actual cardinality of the table variable encountered on first compilation instead of a fixed guess. Weitere Informationen finden Sie unter Verzögerte Kompilierung von Tabellenvariablen.For more information, see table variable deferred compilation.

Weitere Informationen zu Abfrageverarbeitungsfeatures, die im Datenbank-Kompatibilitätsgrad 150 aktiviert sind, finden Sie unter Neuigkeiten zu SQL Server 2019 und Intelligente Abfrageverarbeitung in SQL Server-Datenbanken.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.

Unterschiede zwischen Kompatibilitätsgrad 130 und Kompatibilitätsgrad 140Differences between Compatibility Level 130 and Level 140

In diesem Abschnitt werden neue mit Kompatibilitätsgrad 140 eingeführte Verhaltensweisen beschrieben.This section describes new behaviors introduced with compatibility level 140.

Kompatibilitätsgradeinstellung 130 oder niedrigerCompatibility level setting of 130 or lower Kompatibilitätsgradeinstellung 140Compatibility level setting of 140
Bei Kardinalitätsschätzungen für Anweisungen, die auf Tabellenwertfunktionen mit mehreren Anweisungen verweisen, wird eine feste Zeilenvorhersage verwendet.Cardinality estimates for statements referencing multi-statement table-valued functions use a fixed row guess. Bei Kardinalitätsschätzungen für zulässige Anweisungen, die auf Tabellenwertfunktionen mit mehreren Anweisungen verweisen, wird die tatsächliche Kardinalität der Funktionsausgabe verwendet.Cardinality estimates for eligible statements referencing multi-statement table-valued functions will use the actual cardinality of the function output. Dies wird über die geschachtelte Ausführung für Tabellenwertfunktionen mit mehreren Anweisungen aktiviert.This is enabled via interleaved execution for multi-statement table-valued functions.
Abfragen im Batchmodus, die nicht genügend Arbeitsspeicherzuweisungen anfordern, was zu einem Überlauf der Datenträger führt, haben möglicherweise weiterhin Probleme mit aufeinanderfolgenden Ausführungen.Batch-mode queries that request insufficient memory grant sizes that result in spills to disk may continue to have issues on consecutive executions. Abfragen im Batchmodus, die nicht genügend Arbeitsspeicherzuweisungen anfordern, was zu einem Überlauf der Datenträger führt, weisen bei aufeinanderfolgenden Ausführungen möglicherweise eine Leistungssteigerung auf.Batch-mode queries that request insufficient memory grant sizes that result in spills to disk may have improved performance on consecutive executions. Dies wird über das Feedback zur Speicherzuweisung im Batchmodus ermöglicht, das die Arbeitsspeicherzuweisung eines zwischengespeicherten Plans aktualisiert, wenn es bei Operatoren im Batchmodus zu Überläufen kommt.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.
Abfragen im Batchmodus, die eine übermäßige Arbeitsspeicherzuweisung anfordern, die zu Parallelitätsproblemen führt, haben möglicherweise weiterhin Probleme mit aufeinanderfolgenden Ausführungen.Batch-mode queries that request an excessive memory grant size that results in concurrency issues may continue to have issues on consecutive executions. Abfragen im Batchmodus, die eine übermäßige Arbeitsspeicherzuweisung anfordern, die zu Parallelitätsproblemen führt, weisen bei aufeinanderfolgenden Ausführungen möglicherweise eine verbesserte Parallelität auf.Batch-mode queries that request an excessive memory grant size that results in concurrency issues may have improved concurrency on consecutive executions. Dies wird über das Feedback zur Speicherzuweisung im Batchmodus ermöglicht, das die Arbeitsspeicherzuweisung eines zwischengespeicherten Plans aktualisiert, wenn ursprünglich eine übermäßige Speicherkapazität angefordert wurde.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.
Abfragen im Batchmodus, die Verknüpfungsoperatorrn enthalten, sind für drei physische LOIN-Algorithmen geeignet, zu denen geschachtelte Schleifen, Hashjoins und Mergejoins zählen.Batch-mode queries that contain join operators are eligible for three physical join algorithms, including nested loop, hash join and merge join. Wenn Kardinalitätsschätzungen für Join-Eingaben falsch sind, wird möglicherweise ein ungeeigneter JOIN-Algorithmus ausgewählt.If cardinality estimates are incorrect for join inputs, an inappropriate join algorithm may be selected. Dies hat negative Auswirkungen auf die Leistung. Zudem wird der ungeeignete JOIN-Algorithmus so lange weiter verwendet, bis der zwischengespeicherte Plan erneut kompiliert wurde.If this occurs, performance will suffer and the inappropriate join algorithm will remain in use until the cached plan is recompiled. Es gibt einen weiteren Verknüpfungsoperator mit dem Namen adaptiver Join.There is an additional join operator called adaptive join. Wenn Kardinalitätsschätzungen für die äußere erstellte Join-Eingaben falsch sind, wird möglicherweise ein ungeeigneter Join-Algorithmus ausgewählt.If cardinality estimates are incorrect for the outer build join input, an inappropriate join algorithm may be selected. Wenn dieser Fall eintritt und die Anweisung für einen adaptiven Join geeignet ist, wird auf dynamische Weise für kleinere Join-Eingaben eine geschachtelte Schleife und für umfangreichere Join-Eingaben ein Hashjoin verwendet, ohne dass eine Rekompilierung erforderlich ist.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.
Triviale Pläne, die auf Columnstore-Indizes verweisen, sind für eine Ausführung im Batchmodus nicht geeignet.Trivial plans referencing Columnstore indexes are not eligible for batch mode execution. Ein trivialer Plan, der auf Columnstore-Indizes verweist, wird zugunsten eines Plans gelöscht, der für eine Ausführung im Batchmodus geeignet ist.A trivial plan referencing Columnstore indexes will be discarded in favor of a plan that is eligible for batch mode execution.
Der sp_execute_external_script-UDX-Operator kann nur im Zeilenmodus ausgeführt werden.The sp_execute_external_script UDX operator can only run in row mode. Der sp_execute_external_script-UDX-Operator ist für eine Ausführung im Batchmodus geeignet.The sp_execute_external_script UDX operator is eligible for batch mode execution.
Tabellenwertfunktionen mit mehreren Anweisungen verfügen über keine verschachtelte AusführungMulti-statement table-valued functions (TVF's) do not have interleaved execution Verschachtelte Ausführung für Tabellenwertfunktionen mit mehreren Anweisungen zur Verbesserung der Planqualität.Interleaved execution for multi-statement TVFs to improve plan quality.

Fixes unter dem Ablaufverfolgungsflag 4199 in früheren Versionen von SQL Server vor SQL Server 2017 sind jetzt standardmäßig aktiviert.Fixes that were under trace flag 4199 in earlier versions of SQL Server prior to SQL Server 2017 are now enabled by default. Mit Kompatibilitätsmodus 140.With compatibility mode 140. Das Ablaufverfolgungsflag 4199 gilt weiterhin für Fixes für den neuen Abfrageoptimierer, die nach SQL Server 2017 veröffentlicht werden.Trace flag 4199 will still be applicable for new query optimizer fixes that are released after SQL Server 2017. Informationen zum Ablaufverfolgungsflag 4199 finden Sie unter Ablaufverfolgungsflag 4199.For information about Trace Flag 4199, see Trace Flag 4199.

Unterschiede zwischen Kompatibilitätsgrad 120 und Kompatibilitätsgrad 130Differences between Compatibility Level 120 and Level 130

In diesem Abschnitt werden neue mit Kompatibilitätsgrad 130 eingeführte Verhaltensweisen beschrieben.This section describes new behaviors introduced with compatibility level 130.

Kompatibilitätsgradeinstellung 120 oder niedrigerCompatibility level setting of 120 or lower Kompatibilitätsgradeinstellung 130Compatibility level setting of 130
Die INSERT-Anweisung in einer INSERT-SELECT-Anweisung erhält einen einzelnen Thread.The INSERT in an INSERT-SELECT statement is single-threaded. Die INSERT-Anweisung in einer INSERT-SELECT-Anweisung erhält mehrere Threads oder kann einen parallelen Plan aufweisen.The INSERT in an INSERT-SELECT statement is multi-threaded or can have a parallel plan.
Abfragen für eine speicheroptimierte Tabelle werden in einem einzelnen Thread ausgeführt.Queries on a memory-optimized table execute single-threaded. Abfragen für eine speicheroptimierte Tabelle können jetzt parallele Pläne aufweisen.Queries on a memory-optimized table can now have parallel plans.
Einführung der SQL 2014-Kardinalitätsschätzung CardinalityEstimationModelVersion="120"Introduced the SQL 2014 Cardinality estimator CardinalityEstimationModelVersion="120" Weitere Verbesserungen der Kardinalitätsschätzung im Kardinalitätsschätzungsmodell 130, das in einem Abfrageplan angezeigt werden kann.Further cardinality estimation (CE) Improvements with the Cardinality Estimation Model 130 which is visible from a Query plan. CardinalityEstimationModelVersion="130"CardinalityEstimationModelVersion="130"
Änderungen des Batchmodus im Vergleich zu Änderungen des Zeilenmodus mit Columnstore-Indizes:Batch mode versus Row Mode changes with Columnstore indexes:
  • Sortierungen in einer Tabelle mit Columnstore-Index weisen einen Zeilenmodus aufSorts on a table with Columnstore index are in Row mode
  • Fensterfunktionsaggregate werden in einem Zeilenmodus wie LAG oder LEAD ausgeführtWindowing function aggregates operate in row mode such as LAG or LEAD
  • Abfragen in Columnstore-Tabellen mit mehreren unterschiedlichen, im Zeilenmodus ausgeführten KlauselnQueries on Columnstore tables with Multiple distinct clauses operated in Row mode
  • Abfragen, die unter MAXDOP 1 oder mit einem seriellen Plan im Zeilenmodus ausgeführt werdenQueries running under MAXDOP 1 or with a serial plan executed in Row mode
Änderungen des Batchmodus im Vergleich zu Änderungen des Zeilenmodus mit Columnstore-Indizes:Batch mode versus Row Mode changes with Columnstore indexes:
  • Sortierungen in einer Tabelle mit einem Columnstore-Index weisen jetzt einen Batchmodus aufSorts on a table with a Columnstore index are now in batch mode
  • Fensteraggregate werden jetzt in einem Batchmodus wie LAG oder LEAD ausgeführtWindowing aggregates now operate in batch mode such as LAG or LEAD
  • Abfragen für Columnstore-Tabellen mit mehreren unterschiedlichen, im Batchmodus ausgeführten KlauselnQueries on Columnstore tables with Multiple distinct clauses operate in Batch mode
  • Abfragen unter MAXDOP 1 oder mit einem seriellen Plan werden im Batchmodus ausgeführtQueries running under MAXDOP 1 or with a serial plan execute in Batch Mode
Statistiken können automatisch aktualisiert werden.Statistics can be automatically updated. Die Logik, die Statistiken automatisch aktualisiert, ist bei umfangreichen Tabellen aggressiver.The logic which automatically updates statistics is more aggressive on large tables. In der Praxis soll dies Fälle reduzieren, in denen Kunden bei Abfragen Leistungsprobleme feststellen, bei denen häufig neu eingefügte Zeilen abgefragt werden, bei denen die Statistiken jedoch nicht entsprechend aktualisiert wurden und diese Werte noch nicht enthalten sind.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.
Die Ablaufverfolgung 2371 ist in SQL Server 2014 (12.x)SQL Server 2014 (12.x) standardmäßig auf OFF festgelegt.Trace 2371 is OFF by default in SQL Server 2014 (12.x)SQL Server 2014 (12.x). Die Ablaufverfolgung 2371 ist in SQL Server 2016 (13.x)SQL Server 2016 (13.x) standardmäßig auf ON festgelegt.Trace 2371 is ON by default in SQL Server 2016 (13.x)SQL Server 2016 (13.x). Das Ablaufverfolgungsflag 2371 weist den automatischen Statistikupdater an, in einer Tabelle mit vielen Zeilen Stichproben von einer kleineren, aber sinnvolleren Teilmenge von Zeilen durchzuführen.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.

Eine Verbesserung besteht darin, in der Stichprobe mehr Zeilen einzubeziehen, die kürzlich eingefügt wurden.One improvement is to include in the sample more rows that were inserted recently.

Eine weitere Verbesserung besteht darin, Abfragen während des Prozesses der Statistikaktualisierung nicht zu blockieren, sondern weiter auszuführen.Another improvement is to let queries run while the update statistics process is running, rather than blocking the query.
Für den Kompatibilitätsgrad 120 werden in einem Singlethreadprozess Stichproben aus Statistiken entnommen.For level 120, statistics are sampled by a single-threaded process. Für den Kompatibilitätsgrad 130 werden in einem Multithreadprozess Stichproben aus Statistiken entnommen.For level 130, statistics are sampled by a multi-threaded process (parallel process).
Der Grenzwert liegt bei 253 eingehenden Fremdschlüsseln.253 incoming foreign keys is the limit. Bis zu 10.000 eingehende Fremdschlüssel oder vergleichbare Referenzen können auf eine bestimmte Tabelle verweisen.A given table can be referenced by up to 10,000 incoming foreign keys or similar references. Einschränkungen finden Sie unter Create Foreign Key Relationships.For restrictions, see Create Foreign Key Relationships.
Die als veraltet markierten Hashalgorithmen MD2, MD4, MD5, SHA und SHA1 sind zulässig.The deprecated MD2, MD4, MD5, SHA, and SHA1 hash algorithms are permitted. Nur die Hashalgorithmen SHA2_256 und SHA2_512 sind zulässig.Only SHA2_256 and SHA2_512 hash algorithms are permitted.
SQL Server 2016 (13.x)SQL Server 2016 (13.x) schließt Verbesserungen bei einigen Datentypkonvertierungen und einigen Vorgängen (eher selten) ein.includes improvements in some data types conversions and some (mostly uncommon) operations. Weitere Einzelheiten finden Sie unter SQL Server 2016 improvements in handling some data types and uncommon operations (Verbesserungen der Verarbeitung einiger Datentypen und seltener Vorgänge in SQL Server 2016).For details see SQL Server 2016 improvements in handling some data types and uncommon operations.
Die Funktion STRING_SPLIT ist nicht verfügbar.The STRING_SPLIT function is not available. Die Funktion STRING_SPLIT steht für den Kompatibilitätsgrad 130 oder höher zur Verfügung.The STRING_SPLIT function is available under compatibility level 130 or above. Wenn der Kompatibilitätsgrad Ihrer Datenbank niedriger als 130 ist, kann SQL ServerSQL Server die STRING_SPLIT-Funktion nicht suchen und ausführen.If your Database Compatibility Level is lower than 130, SQL ServerSQL Server will not be able to find and execute STRING_SPLIT function.

Fixes unter dem Ablaufverfolgungsflag 4199 in früheren Versionen von SQL ServerSQL Server vor SQL Server 2016 (13.x)SQL Server 2016 (13.x) sind jetzt standardmäßig aktiviert.Fixes 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. Mit Kompatibilitätsmodus 130.With compatibility mode 130. Das Ablaufverfolgungsflag 4199 gilt weiterhin für Fixes für den neuen Abfrageoptimierer, die nach SQL Server 2016 (13.x)SQL Server 2016 (13.x) veröffentlicht werden.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). Für die Verwendung des älteren Abfrageoptimierers in SQL-DatenbankSQL Database müssen Sie den Kompatibilitätsgrad 110 auswählen.To use the older query optimizer in SQL-DatenbankSQL Database you must select compatibility level 110. Informationen zum Ablaufverfolgungsflag 4199 finden Sie unter Ablaufverfolgungsflag 4199.For information about Trace Flag 4199, see Trace Flag 4199.

Unterschiede zwischen niedrigeren Kompatibilitätsgraden und Kompatibilitätsgrad 120Differences between Lower Compatibility Levels and Level 120

In diesem Abschnitt werden neue mit Kompatibilitätsgrad 120 eingeführte Verhaltensweisen beschrieben.This section describes new behaviors introduced with compatibility level 120.

Kompatibilitätsgradeinstellung 110 oder niedrigerCompatibility level setting of 110 or lower Kompatibilitätsgradeinstellung 120Compatibility level setting of 120
Der ältere Abfrageoptimierer wird verwendet.The older query optimizer is used. SQL Server 2014 (12.x)SQL Server 2014 (12.x) schließt deutliche Verbesserungen der Komponente zum Erstellen und Optimieren von Abfrageplänen ein.includes substantial improvements to the component that creates and optimizes query plans. Diese neue Funktion des Abfrageoptimierers ist nur bei Verwendung des Datenbank-Kompatibilitätsgrads 120 verfügbar.This new query optimizer feature is dependent upon use of the Database Compatibility Level 120. Damit diese Verbesserungen optimal genutzt werden können, sollten neue Datenbankanwendungen mit dem Datenbank-Kompatibilitätsgrad 120 entwickelt werden.New database applications should be developed using Database Compatibility Level 120 to take advantage of these improvements. Von früheren SQL ServerSQL Server-Versionen migrierte Anwendungen sollten sorgfältig daraufhin überprüft werden, ob die bisherige gute Leistung aufrechterhalten bzw. verbessert wird.Applications that are migrated from earlier versions of SQL ServerSQL Server should be carefully tested to confirm that good performance is maintained or improved. Wird die Leistung beeinträchtigt, können Sie den Kompatibilitätsgrad der Datenbank auf 110 oder einen niedrigeren Wert festlegen, um die ältere Methodologie des Abfrageoptimierers zu nutzen.If performance degrades, you can set the Database Compatibility Level to 110 or earlier to use the older query optimizer methodology.

Der Datenbank-Kompatibilitätsgrad 120 verwendet eine neue Kardinalitätsschätzung, die für moderne Data-Warehousing- und OLTP-Arbeitsauslastungen optimiert ist.Database Compatibility Level 120 uses a new cardinality estimator that is tuned for modern data warehousing and OLTP workloads. Bevor Sie den Datenbank-Kompatibilitätsgrad aufgrund von Leistungsproblemen auf 110 festlegen, sollten Sie die Empfehlungen im Abschnitt Abfragepläne des SQL Server 2014 (12.x)SQL Server 2014 (12.x)-Artikels Neues in der Datenbank-Engine lesen.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.
Bei Kompatibilitätsgraden unter 120 wird die Spracheinstellung beim Konvertieren eines date-Werts in einen Zeichenfolgenwert ignoriert.In compatibility levels lower than 120, the language setting is ignored when converting a date value to a string value. Beachten Sie, dass dieses Verhalten nur für den date-Typ spezifisch ist.Note that this behavior is specific only to the date type. Siehe Beispiel B im Abschnitt „Beispiele“ weiter unten.See example B in the Examples section below. Die Spracheinstellung wird nicht ignoriert, wenn ein date-Wert in eine Zeichenfolge konvertiert wird.The language setting is not ignored when converting a date value to a string value.
Rekursive Verweise auf der rechten Seite einer EXCEPT-Klausel erzeugen eine Endlosschleife.Recursive references on the right-hand side of an EXCEPT clause create an infinite loop. In Beispiel C im nachfolgenden Abschnitt „Beispiele“ wird dieses Verhalten veranschaulicht.Example C in the Examples section below demonstrates this behavior. Rekursive Verweise in einer EXCEPT-Klausel generieren gemäß dem ANSI SQL-Standard einen Fehler.Recursive references in an EXCEPT clause generates an error in compliance with the ANSI SQL standard.
Der rekursive allgemeine Tabellenausdruck (Common Table Expression, CTE) lässt doppelte Spaltennamen zu.Recursive common table expression (CTE) allows duplicate column names. Der rekursive CTE lässt keine doppelten Spaltennamen zu.Recursive CTE does not allow duplicate column names.
Deaktivierte Trigger werden aktiviert, wenn die Trigger geändert werden.Disabled triggers are enabled if the triggers are altered. Das Ändern eines Triggers ändert nicht den Status (deaktiviert oder aktiviert) des Triggers.Altering a trigger does not change the state (enabled or disabled) of the trigger.
Die OUTPUT INTO-Tabellenklausel ingoiert die IDENTITY_INSERT SETTING = OFF und lässt zu, dass explizite Werte eingefügt werden.The OUTPUT INTO table clause ignores the IDENTITY_INSERT SETTING = OFF and allows explicit values to be inserted. Sie können keine expliziten Werte für eine Identitätsspalte in einer Tabelle einfügen, wenn IDENTITY_INSERT auf OFF festgelegt ist.You cannot insert explicit values for an identity column in a table when IDENTITY_INSERT is set to OFF.
Wenn die Datenbankkapselung auf PARTIAL festgelegt ist, kann die Überprüfung des $action-Felds in der OUTPUT-Klausel einer MERGE-Anweisung einen Sortierungsfehler zurückgeben.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. Die von der $action-Klausel einer MERGE-Anweisung zurückgegebene Sortierung der Werte entspricht der Datenbanksortierung anstelle der Serversortierung. Es wird kein Sortierungskonfliktfehler zurückgegeben.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.
Durch eine SELECT INTO-Anweisung wird immer ein Singlethread-Einfügevorgang erstellt.A SELECT INTO statement always creates a single-threaded insert operation. Durch eine SELECT INTO-Anweisung kann ein paralleler Einfügevorgang erstellt werden.A SELECT INTO statement can create a parallel insert operation. Beim Einfügen einer großer Anzahl von Zeilen kann die Leistung durch den parallelen Vorgang verbessert werden.When inserting a large number of rows, the parallel operation can improve performance.

Unterschiede zwischen niedrigeren Kompatibilitätsgraden und den Kompatibilitätsgraden 100 und 110Differences between Lower Compatibility Levels and Levels 100 and 110

In diesem Abschnitt werden neue mit Kompatibilitätsgrad 110 eingeführte Verhaltensweisen beschrieben.This section describes new behaviors introduced with compatibility level 110. Dieser Abschnitt bezieht sich auch auf höhere Kompatibilitätsgrade als 110.This section also applies to compatibility levels above 110.

Kompatibilitätsgradeinstellung 100 oder niedrigerCompatibility level setting of 100 or lower Kompatibilitätsgradeinstellung 110 oder höherCompatibility level setting of at least 110
Common Language Runtime (CLR)-Datenbankobjekte werden mit Version 4 der CLR ausgeführt.Common language runtime (CLR) database objects are executed with version 4 of the CLR. Einige in Version 4 der CLR eingeführte Verhaltensänderungen werden jedoch vermieden.However, some behavior changes introduced in version 4 of the CLR are avoided. Weitere Informationen finden Sie unter Neues in der CLR-Integration.For more information, see What's New in CLR Integration. CLR-Datenbankobjekte werden mit Version 4 der CLR ausgeführt.CLR database objects are executed with version 4 of the CLR.
Die XQuery-Funktionen string-length und substring betrachten jedes Ersatzzeichen als zwei Zeichen.The XQuery functions string-length and substring count each surrogate as two characters. Die XQuery-Funktionen string-length und substring betrachten jedes Ersatzzeichen als ein Zeichen.The XQuery functions string-length and substring count each surrogate as one character.
PIVOT ist in einer Abfrage für einen rekursiven allgemeinen Tabellenausdruck (Common Table Expression, CTE) zulässig.PIVOT is allowed in a recursive common table expression (CTE) query. Die Abfrage gibt jedoch falsche Ergebnisse zurück, wenn mehrere Zeilen pro Gruppierung vorhanden sind.However, the query returns incorrect results when there are multiple rows per grouping. PIVOT ist in einer Abfrage für einen rekursiven allgemeinen Tabellenausdruck (Common Table Expression, CTE) nicht zulässig.PIVOT is not allowed in a recursive common table expression (CTE) query. Es wird ein Fehler zurückgegeben.An error is returned.
Der RC4-Algorithmus wird nur aus Gründen der Abwärtskompatibilität unterstützt.The RC4 algorithm is only supported for backward compatibility. Neues Material kann nur mit RC4 oder RC4_128 verschlüsselt werden, wenn die Datenbank den Kompatibilitätsgrad 90 oder 100 besitzt.New material can only be encrypted using RC4 or RC4_128 when the database is in compatibility level 90 or 100. (Nicht empfohlen.) In SQL Server 2012 (11.x)SQL Server 2012 (11.x) kann mit RC4 oder RC4_128 verschlüsseltes Material in jedem Kompatibilitätsgrad entschlüsselt werden.(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. Neues Material kann nicht mit RC4 oder RC4_128 verschlüsselt werden.New material cannot be encrypted using RC4 or RC4_128. Verwenden Sie stattdessen einen neueren Algorithmus, z. B. einen der AES-Algorithmen.Use a newer algorithm such as one of the AES algorithms instead. In SQL Server 2012 (11.x)SQL Server 2012 (11.x) kann mit RC4 oder RC4_128 verschlüsseltes Material in jedem Kompatibilitätsgrad entschlüsselt werden.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.
Das Standardformat für CAST- und CONVERT-Vorgänge bei den Datentypen time und datetime2 ist 121, es sei denn, einer der Typen wird in einem berechneten Spaltenausdruck verwendet.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. Für berechnete Spalten ist das Standardformat 0.For computed columns, the default style is 0. Dieses Verhalten wirkt sich auf berechnete Spalten aus, wenn sie erstellt werden und in Abfragen mit automatischer Parametrisierung oder in Einschränkungsdefinitionen verwendet werden.This behavior impacts computed columns when they are created, used in queries involving auto-parameterization, or used in constraint definitions.

In Beispiel D im nachfolgenden Abschnitt „Beispiele“ wird der Unterschied zwischen den Formaten 0 und 121 veranschaulicht.Example D in the Examples section below shows the difference between styles 0 and 121. Das oben beschriebene Verhalten wird nicht veranschaulicht.It does not demonstrate the behavior described above. Weitere Informationen zu Datums- und Zeitformaten finden Sie unter CAST und CONVERT.For more information about date and time styles, see CAST and CONVERT.
Unter dem Kompatibilitätsgrad 110 ist das Standardformat für CAST- und CONVERT-Vorgänge im Fall der Datentypen time und datetime2 immer 121.Under compatibility level 110, the default style for CAST and CONVERT operations on time and datetime2 data types is always 121. Basiert die Abfrage auf dem alten Verhalten, verwenden Sie einen Kompatibilitätsgrad unter 110, oder geben Sie in der betroffenen Abfrage explizit das Format 0 an.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.

Ein Update der Datenbank auf Kompatibilitätsgrad 110 ändert keine Benutzerdaten, die auf dem Datenträger gespeichert wurden.Upgrading the database to compatibility level 110 will not change user data that has been stored to disk. Sie müssen diese Daten entsprechend manuell korrigieren.You must manually correct this data as appropriate. Haben Sie beispielsweise SELECT INTO zum Erstellen einer Tabelle von einer Quelle verwendet, die einen Ausdruck für eine berechnete Spalte (oben beschrieben) beinhaltete, werden die Daten mit dem Format 0 anstelle der Definition der berechneten Spalte an sich gespeichert.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. Sie müssen diese Daten manuell aktualisieren, um sie an das Format 121 anzupassen.You would need to manually update this data to match style 121.
Alle Spalten in Remotetabellen des Typs smalldatetime, auf die in einer partitionierten Ansicht verwiesen wird, werden als datetime zugeordnet.Any columns in remote tables of type smalldatetime that are referenced in a partitioned view are mapped as datetime. Entsprechende Spalten in lokalen Tabellen (in derselben Ordnungsposition in der Auswahlliste) müssen den Typ datetime aufweisen.Corresponding columns in local tables (in the same ordinal position in the select list) must be of type datetime. Alle Spalten in Remotetabellen des Typs smalldatetime, auf die in einer partitionierten Ansicht verwiesen wird, werden als smalldatetime zugeordnet.Any columns in remote tables of type smalldatetime that are referenced in a partitioned view are mapped as smalldatetime. Entsprechende Spalten in lokalen Tabellen (in derselben Ordnungsposition in der Auswahlliste) müssen den Typ smalldatetime aufweisen.Corresponding columns in local tables (in the same ordinal position in the select list) must be of type smalldatetime.

Nach dem Upgrade auf 110 schlägt die verteilte partitionierte Sicht wegen des Datentypkonflikts fehl.After upgrading to 110, the distributed partitioned view will fail because of the data type mismatch. Sie können dieses Problem beheben, indem Sie den Datentyp in der Remotetabelle in datetime ändern oder den Kompatibilitätsgrad der lokalen Datenbank auf höchstens 100 festlegen.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.
Die SOUNDEX-Funktion implementiert die folgenden Regeln:SOUNDEX function implements the following rules:

1) H oder W in Großbuchstaben werden beim Trennen von zwei Konsonanten ignoriert, welche die gleiche Zahl im SOUNDEX-Code aufweisen.1) Upper-case H or upper-case W are ignored when separating two consonants that have the same number in the SOUNDEX code.

2) Wenn die ersten beiden Zeichen von character_expression die gleiche Zahl im SOUNDEX-Code aufweisen, werden beide Zeichen eingeschlossen.2) If the first 2 characters of character_expression have the same number in the SOUNDEX code, both characters are included. Wenn ein Satz nebeneinander liegender Konsonanten die gleiche Zahl im SOUNDEX-Code aufweist, werden andernfalls alle Zeichen außer dem ersten Zeichen ausgeschlossen.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.
Die SOUNDEX-Funktion implementiert die folgenden Regeln:SOUNDEX function implements the following rules:

1) Wenn H oder W in Großbuchstaben zwei Konsonanten trennt, welche die gleiche Zahl im SOUNDEX-Code aufweisen, wird der rechts stehende Konsonant ignoriert.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) Wenn ein Satz nebeneinander liegender Konsonanten die gleiche Zahl im SOUNDEX-Code aufweist, werden andernfalls alle Zeichen außer dem ersten Zeichen ausgeschlossen.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.



Die zusätzlichen Regeln führen möglicherweise dazu, dass die von der SOUNDEX-Funktion berechneten Werte sich von den unter früheren Kompatibilitätsgraden berechneten Werten unterscheiden.The additional rules may cause the values computed by the SOUNDEX function to be different than the values computed under earlier compatibility levels. Möglicherweise sind die Indizes, Heaps oder CHECK-Einschränkungen, welche die SOUNDEX-Funktion verwenden, nach dem Upgrade auf Kompatibilitätsgrad 110 erneut zu erstellen.After upgrading to compatibility level 110, you may need to rebuild the indexes, heaps, or CHECK constraints that use the SOUNDEX function. Weitere Informationen finden Sie unter SOUNDEX.For more information, see SOUNDEX.

Unterschiede zwischen Kompatibilitätsgrad 90 und Kompatibilitätsgrad 100Differences between Compatibility Level 90 and Level 100

In diesem Abschnitt werden neue mit Kompatibilitätsgrad 100 eingeführte Verhaltensweisen beschrieben.This section describes new behaviors introduced with compatibility level 100.

Kompatibilitätsgradeinstellung 90Compatibility level setting of 90 Kompatibilitätsgradeinstellung 100Compatibility level setting of 100 Mögliche AuswirkungPossibility of impact
Die Einstellung QUOTED_IDENTIFER ist für Tabellenwertfunktionen mit mehreren Anweisungen immer auf ON festgelegt, wenn diese erstellt werden, unabhängig von der Einstellung auf Sitzungsebene.The QUOTED_IDENTIFER setting is always set to ON for multistatement table-valued functions when they are created regardless of the session level setting. Die QUOTED IDENTIFIER-Sitzungseinstellung wird berücksichtigt, wenn Tabellenwertfunktionen mit mehreren Anweisungen erstellt werden.The QUOTED IDENTIFIER session setting is honored when multistatement table-valued functions are created. MediumMedium
Wenn Sie eine Partitionsfunktion erstellen oder ändern, werden die Literale datetime und smalldatetime in der Funktion ausgewertet, wobei von US_Englisch als Spracheinstellung ausgegangen wird.When you create or alter a partition function, datetime and smalldatetime literals in the function are evaluated assuming US_English as the language setting. Die aktuelle Spracheinstellung wird verwendet, um die Literale datetime und smalldatetime in der Partitionsfunktion auszuwerten.The current language setting is used to evaluate datetime and smalldatetime literals in the partition function. MediumMedium
Die FOR BROWSE-Klausel ist in INSERT- und SELECT INTO-Anweisungen zulässig (und wird ignoriert).The FOR BROWSE clause is allowed (and ignored) in INSERT and SELECT INTO statements. Die FOR BROWSE-Klausel ist in INSERT- und SELECT INTO-Anweisungen nicht zulässig.The FOR BROWSE clause is not allowed in INSERT and SELECT INTO statements. MediumMedium
Volltextprädikate sind in der OUTPUT-Klausel zulässig.Full-text predicates are allowed in the OUTPUT clause. Volltextprädikate sind in der OUTPUT-Klausel nicht zulässig.Full-text predicates are not allowed in the OUTPUT clause. LowLow
CREATE FULLTEXT STOPLIST, ALTER FULLTEXT STOPLIST und DROP FULLTEXT STOPLIST werden nicht unterstützt.CREATE FULLTEXT STOPLIST, ALTER FULLTEXT STOPLIST, and DROP FULLTEXT STOPLIST are not supported. Die Systemstoppliste wird automatisch neuen Volltextindizes zugeordnet.The system stoplist is automatically associated with new full-text indexes. CREATE FULLTEXT STOPLIST, ALTER FULLTEXT STOPLIST und DROP FULLTEXT STOPLIST werden unterstützt.CREATE FULLTEXT STOPLIST, ALTER FULLTEXT STOPLIST, and DROP FULLTEXT STOPLIST are supported. LowLow
MERGE wird nicht als reserviertes Schlüsselwort erzwungen.MERGE is not enforced as a reserved keyword. MERGE ist ein vollständig reserviertes Schlüsselwort.MERGE is a fully reserved keyword. Die MERGE-Anweisung wird bei den Kompatibilitätsgraden 100 und 90 unterstützt.The MERGE statement is supported under both 100 and 90 compatibility levels. LowLow
Die Verwendung des <dml_table_source>-Arguments der INSERT-Anweisung löst einen Syntaxfehler aus.Using the <dml_table_source> argument of the INSERT statement raises a syntax error. Sie können die Ergebnisse einer OUTPUT-Klausel in einer geschachtelten INSERT-, UPDATE-, DELETE- oder MERGE-Anweisung aufzeichnen und diese Ergebnisse in eine Zieltabelle oder -sicht einfügen.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. Dies erfolgt über das <dml_table_source>-Argument der INSERT-Anweisung.This is done using the <dml_table_source> argument of the INSERT statement. LowLow
Sofern NOINDEX nicht angegeben ist, führt DBCC CHECKDB oder DBCC CHECKTABLE sowohl physische als auch logische Konsistenzprüfungen für eine einzelne Tabelle oder indizierte Ansicht und alle zugehörigen, nicht gruppierten Indizes und XML-Indizes aus.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. Räumliche Indizes werden nicht unterstützt.Spatial indexes are not supported. Sofern NOINDEX nicht angegeben ist, führt DBCC CHECKDB oder DBCC CHECKTABLE sowohl physische als auch logische Konsistenzprüfungen für eine einzelne Tabelle und alle zugehörigen, nicht gruppierten Indizes aus.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. Allerdings werden für XML-Indizes, räumliche Indizes und indizierte Sichten standardmäßig nur physische Konsistenzprüfungen ausgeführt.However, on XML indexes, spatial indexes, and indexed views, only physical consistency checks are performed by default.

Bei Angabe von WITH EXTENDED_LOGICAL_CHECKS werden logische Konsistenzprüfungen an indizierten Ansichten, XML-Indizes und räumlichen Indizes (sofern vorhanden) ausgeführt.If WITH EXTENDED_LOGICAL_CHECKS is specified, logical checks are performed on indexed views, XML indexes, and spatial indexes, where present. Standardmäßig werden physische Konsistenzprüfungen vor den logischen Konsistenzprüfungen ausgeführt.By default, physical consistency checks are performed before the logical consistency checks. Wenn NOINDEX ebenfalls angegeben ist, werden nur die logischen Prüfungen ausgeführt.If NOINDEX is also specified, only the logical checks are performed.
LowLow
Wenn eine OUTPUT-Klausel mit einer DML-Anweisung (Data Manipulation Language, Datenbearbeitungssprache) verwendet wird und während der Ausführung der Anweisung ein Laufzeitfehler auftritt, wird die gesamte Transaktion beendet, und es wird ein Rollback für sie ausgeführt.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. Wenn eine OUTPUT-Klausel mit einer DML-Anweisung (DML = Data Manipulation Language, Datenbearbeitungssprache) verwendet wird und während der Ausführung der Anweisung ein Laufzeitfehler auftritt, hängt das Verhalten von der SET XACT_ABORT-Einstellung ab.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. Wenn SET XACT_ABORT auf OFF festgelegt ist, führt ein Anweisungsabbruchfehler, der von der DML-Anweisung bei Verwendung der OUTPUT-Klausel generiert wird, zum Abbruch der Anweisung. Die Ausführung des Batches wird jedoch fortgesetzt, und es wird kein Rollback für die Transaktion ausgeführt.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. Wenn SET XACT_ABORT auf ON festgelegt ist, bewirken alle Laufzeitfehler, die von der DML-Anweisung bei Verwendung der OUTPUT-Klausel generiert werden, dass der Batch abgebrochen und für die Transaktion ein Rollback ausgeführt wird.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. LowLow
CUBE und ROLLUP werden nicht als reservierte Schlüsselwörter erzwungen.CUBE and ROLLUP are not enforced as reserved keywords. CUBE und ROLLUP sind reservierte Schlüsselwörter innerhalb der GROUP BY-Klausel.CUBE and ROLLUP are reserved keywords within the GROUP BY clause. LowLow
Für Elemente des anyType-XML-Datentyps wird die strict-Überprüfung angewendet.Strict validation is applied to elements of the XML anyType type. Für Elemente des anyType-Datentyps wird die Lax-Überprüfung angewendet.Lax validation is applied to elements of the anyType type. Weitere Informationen finden Sie unter Platzhalterkomponenten und Inhaltsüberprüfung.For more information, see Wildcard Components and Content Validation. LowLow
Die speziellen Attribute xsi:nil und xsi:type können durch DML-Anweisungen nicht abgefragt oder geändert werden.The special attributes xsi:nil and xsi:type cannot be queried or modified by data manipulation language statements.

Dies hat zur Folge, dass /e/@xsi:nil fehlschlägt, während /e/@* die Attribute xsi:nil und xsi:type ignoriert.This means that /e/@xsi:nil fails while /e/@* ignores the xsi:nil and xsi:type attributes. /e gibt jedoch die Attribute xsi:nil und xsi:type aus Gründen der Konsistenz mit SELECT xmlCol zurück, sogar wenn xsi:nil = "false".However, /e returns the xsi:nil and xsi:type attributes for consistency with SELECT xmlCol, even if xsi:nil = "false".
Die speziellen Attribute xsi:nil und xsi:type werden als reguläre Attribute gespeichert und können abgefragt und geändert werden.The special attributes xsi:nil and xsi:type are stored as regular attributes and can be queried and modified.

Beispielsweise werden bei der Ausführung der Abfrage SELECT x.query('a/b/@*') alle Attribute einschließlich xsi:nil und xsi:type zurückgegeben.For example, executing the query SELECT x.query('a/b/@*') returns all attributes including xsi:nil and xsi:type. Zum Ausschließen dieser Typen in der Abfrage müssen Sie @* durch @*[namespace-uri(.) != "insert xsi namespace uri" und nicht (local-name(.) = "type" oder local-name(.) ="nil". ersetzen.To exclude these types in the query, replace @* with @*[namespace-uri(.) != "insert xsi namespace uri" and not (local-name(.) = "type" or local-name(.) ="nil".
LowLow
Eine benutzerdefinierte Funktion, die eine XML-Zeichenfolgenkonstante in einen SQL ServerSQL Server-datetime-Typ konvertiert, wird als deterministisch gekennzeichnet.A user-defined function that converts an XML constant string value to a SQL ServerSQL Server datetime type is marked as deterministic. Eine benutzerdefinierte Funktion, die eine XML-Zeichenfolgenkonstante in einen SQL ServerSQL Server-datetime-Typ konvertiert, wird als nicht deterministisch gekennzeichnet.A user-defined function that converts an XML constant string value to a SQL ServerSQL Server datetime type is marked as non-deterministic. LowLow
Die XML-Datentypen "union" und "list" werden nicht vollständig unterstützt.The XML union and list types are not fully supported. Die XML-Datentypen "union" und "list" werden vollständig unterstützt, einschließlich der folgenden Funktionalität:The union and list types are fully supported including the following functionality:

"union" von "list"Union of list

"union" von "union"Union of union

Liste der atomaren TypenList of atomic types

"list" von "union"List of union
LowLow
Die für eine xQuery-Methode erforderlichen SET-Optionen werden nicht überprüft, wenn die Methode in einer Sicht oder Inline-Tabellenwertfunktion enthalten ist.The SET options required for an xQuery method are not validated when the method is contained in a view or inline table-valued function. Die für eine xQuery-Methode erforderlichen SET-Optionen werden überprüft, wenn die Methode in einer Sicht oder Inline-Tabellenwertfunktion enthalten ist.The SET options required for an xQuery method are validated when the method is contained in a view or inline table-valued function. Wenn die SET-Optionen der Methode nicht ordnungsgemäß festgelegt sind, wird ein Fehler ausgegeben.An error is raised if the SET options of the method are set incorrectly. LowLow
XML-Attributwerte, die Zeilenendezeichen enthalten (Wagenrücklauf und Zeilenvorschub) werden nicht gemäß dem XML-Standard normalisiert.XML attribute values that contain end-of-line characters (carriage return and line feed) are not normalized according to the XML standard. Somit werden anstelle eines einzelnen Zeilenvorschubzeichens beide Zeichen zurückgegeben.That is, both characters are returned instead of a single line-feed character. XML-Attributwerte, die Zeilenendezeichen enthalten (Wagenrücklauf und Zeilenvorschub) werden gemäß dem XML-Standard normalisiert.XML attribute values that contain end-of-line characters (carriage return and line feed) are normalized according to the XML standard. Somit werden alle Zeilenumbrüche in extern analysierten Entitäten (einschließlich der Dokumententität) bei Eingabe normalisiert, indem sowohl die aus zwei Zeichen bestehende Folge #xD #xA als auch alle Vorkommnisse von #xD, die nicht von #xA gefolgt werden, in das einzelne Zeichen #xA übersetzt werden.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.

Anwendungen, die mithilfe von Attributen Zeichenfolgenwerte transportieren, die Zeilenendezeichen enthalten, erhalten diese Zeichen nicht wie gesendet zurück.Applications that use attributes to transport string values that contain end-of-line characters will not receive these characters back as they are submitted. Um die Normalisierung zu verhindern, müssen für die Codierung aller Zeilenendezeichen numerische XML-Zeichenentitäten verwendet werden.To avoid the normalization process, use the XML numeric character entities to encode all end-of-line characters.
LowLow
Die Spalteneigenschaften ROWGUIDCOL und IDENTITY können als Einschränkung falsch benannt werden.The column properties ROWGUIDCOL and IDENTITY can be incorrectly named as a constraint. Beispielsweise wird die Anweisung CREATE TABLE T (C1 int CONSTRAINT MyConstraint IDENTITY) ausgeführt, doch wird der Einschränkungsname nicht beibehalten und ist für den Benutzer nicht verfügbar.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. Die Spalteneigenschaften ROWGUIDCOL und IDENTITY können nicht als Einschränkung benannt werden.The column properties ROWGUIDCOL and IDENTITY cannot be named as a constraint. Der Fehler 156 wird zurückgegeben.Error 156 is returned. LowLow
Die Aktualisierung von Spalten mithilfe einer bidirektionalen Zuweisung, wie z.B. UPDATE T1 SET @v = column_name = <expression>, kann zu unerwarteten Ergebnissen führen, weil während der Ausführung der Anweisung anstelle des Anfangswerts der aktuelle Wert der Variablen in anderen Klauseln verwendet werden kann, wie z.B. in der WHERE- und ON-Klausel.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. Dies kann dazu führen, dass sich die Bedeutungen der Prädikate für jede Zeile einzeln unvorhersehbar ändern.This can cause the meanings of the predicates to change unpredictably on a per-row basis.

Dieses Verhalten gilt nur, wenn der Kompatibilitätsgrad auf 90 festgelegt ist.This behavior is applicable only when the compatibility level is set to 90.
Die Aktualisierung von Spalten mithilfe einer zweiseitigen Zuweisung liefert die erwarteten Ergebnisse, weil während der Ausführung der Anweisung nur auf den Anweisungsanfangswert der Spalte zugegriffen wird.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. LowLow
Weitere Informationen finden Sie im Beispiel E weiter unten im Abschnitt „Beispiele“.See example E in the Examples section below. Siehe Beispiel F im nachfolgenden Abschnitt „Beispiele“.See example F in the Examples section below. LowLow
Die ODBC-Funktion <legacyBold>{fn CONVERT ()}</legacyBold> verwendet das Standarddatumsformat der Sprache.The ODBC function {fn CONVERT()} uses the default date format of the language. Bei einigen Sprachen lautet das Standardformat YDM. Dies kann zu Konvertierungsfehlern führen, wenn CONVERT() mit anderen Funktionen kombiniert wird, die ein YMD-Format erwarten, wie z.B. {fn CURDATE()}.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. Die ODBC-Funktion {fn CONVERT()} verwendet für die Konvertierung in die ODBC-Datentypen SQL_TIMESTAMP, SQL_DATE, SQL_TIME, SQLDATE, SQL_TYPE_TIME und SQL_TYPE_TIMESTAMP das sprachenunabhängige XMD-Format im Format 121.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. LowLow
Für systeminterne datetime-Funktionen, wie z. B. DATEPART, ist es nicht erforderlich, dass Zeichenfolgeneingabewerte gültige datetime-Literale sind.Datetime intrinsics such as DATEPART do not require string input values to be valid datetime literals. SELECT DATEPART (year, '2007/05-30') wird beispielsweise erfolgreich kompiliert.For example, SELECT DATEPART (year, '2007/05-30') compiles successfully. Für systeminterne datetime-Funktionen wie z.B. DATEPART ist es erforderlich, dass Zeichenfolgeneingabewerte gültige datetime-Literale sind.Datetime intrinsics such as DATEPART require string input values to be valid datetime literals. Fehler 241 wird zurückgegeben, wenn ein ungültiges datetime-Literal verwendet wird.Error 241 is returned when an invalid datetime literal is used. LowLow

Reservierte SchlüsselwörterReserved Keywords

Die Kompatibilitätseinstellung bestimmt außerdem die für das Datenbank-EngineDatabase Engine reservierten Schlüsselwörter.The compatibility setting also determines the keywords that are reserved by the Datenbank-EngineDatabase Engine. In der folgenden Tabelle sind die reservierten Schlüsselwörter aufgeführt, die mit den einzelnen Kompatibilitätsgraden eingeführt werden.The following table shows the reserved keywords that are introduced by each of the compatibility levels.

KompatibilitätsgradeinstellungCompatibility level setting Reservierte SchlüsselwörterReserved keywords
130130 Bestimmung erforderlich.To be determined.
120120 Keine.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

Bei einem bestimmten Kompatibilitätsgrad schließen die reservierten Schlüsselwörter alle Schlüsselwörter ein, die mit diesem oder einem niedrigeren Grad eingeführt wurden.At a given compatibility level, the reserved keywords include all of the keywords introduced at or below that level. So stellen z. B. bei Anwendungen mit dem Kompatibilitätsgrad 110 alle in der vorherigen Tabelle aufgeführten Schlüsselwörter reservierte Schlüsselwörter dar.Thus, for instance, for applications at level 110, all of the keywords listed in the preceding table are reserved. Bei den niedrigeren Kompatibilitätsgraden stellen die Schlüsselwörter von Grad 100 weiterhin gültige Objektnamen dar; die Sprachfunktionen von Grad 110, die diesen Schlüsselwörtern entsprechen, sind jedoch nicht verfügbar.At the lower compatibility levels, level-100 keywords remain valid object names, but the level-110 language features corresponding to those keywords are unavailable.

Nach der Einführung bleibt ein Schlüsselwort reserviert.Once introduced, a keyword remains reserved. So stellt z. B. das reservierte Schlüsselwort PIVOT, das mit dem Kompatibilitätsgrad 90 eingeführt wurde, auch bei Grad 100, 110 und 120 ein reserviertes Schlüsselwort dar.For example, the reserved keyword PIVOT, which was introduced in compatibility level 90, is also reserved in levels 100, 110, and 120.

Wenn eine Anwendung einen Bezeichner verwendet, der für den Kompatibilitätsgrad der Anwendung als Schlüsselwort reserviert ist, erzeugt die Anwendung einen Fehler.If an application uses an identifier that is reserved as a keyword for its compatibility level, the application will fail. Sie können dies umgehen, indem Sie den Bezeichner in eckige Klammern ( [] ) oder Anführungszeichen( "" ) einschließen. Wenn Sie z. B. eine Anwendung, die den Bezeichner EXTERNAL verwendet, auf den Kompatibilitätsgrad 90 aktualisieren möchten, könnten Sie den Bezeichner ändern, sodass er anschließend entweder [EXTERNAL] oder "EXTERNAL" lautet.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".

Weitere Informationen finden Sie unter Reservierte Schlüsselwörter.For more information, see Reserved Keywords.

BerechtigungenPermissions

Erfordert die ALTER-Berechtigung für die Datenbank.Requires ALTER permission on the database.

BeispieleExamples

A.A. Ändern des KompatibilitätsgradsChanging the compatibility level

Im folgenden Beispiel wird der Kompatibilitätsgrad der AdventureWorks2012AdventureWorks2012-Datenbank auf 110 festgelegt (Standard für SQL Server 2012 (11.x)SQL Server 2012 (11.x)).The following example changes the compatibility level of the AdventureWorks2012AdventureWorks2012 database to 110, the default for SQL Server 2012 (11.x)SQL Server 2012 (11.x).

ALTER DATABASE AdventureWorks2012
SET COMPATIBILITY_LEVEL = 110;
GO

Im folgenden Beispiel wird der Kompatibilitätsgrad der aktuellen Datenbank zurückgegeben.The following example returns the compatibility level of the current database.

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

B.B. Ignorieren der SET LANGUAGE-Anweisung, es sei denn, es ist ein Kompatibilitätsgrad unter 120 festgelegtIgnoring the SET LANGUAGE statement except under compatibility level 120

Die folgende Abfrage ignoriert die SET LANGUAGE-Anweisung, es sei denn, es ist ein Kompatibilitätsgrad unter 120 festgelegt.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. Rekursive Verweise auf der rechten Seite einer EXCEPT-Klausel erzeugen bei der Kompatibilitätsgradeinstellung von 110 oder niedriger eine Endlosschleife.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. Der Unterschied zwischen den Formaten 0 und 121The difference between styles 0 and 121

Weitere Informationen zu Datums- und Zeitformaten finden Sie unter CAST und 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. Variablenzuweisung – UNION-Operator auf der obersten EbeneVariable assignment - top-level UNION operator

Die Variablenzuweisung ist in einer Anweisung mit einem UNION-Operator auf der obersten Ebene zulässig, kann jedoch unerwartete Ergebnisse zurückgeben.Variable assignment is allowed in a statement containing a top-level UNION operator, but returns unexpected results. Beispielsweise wird in den folgenden Anweisungen der lokalen Variable @v der Wert der Spalte BusinessEntityID aus der Vereinigung von zwei Tabellen zugewiesen.For example, in the following statements, local variable @v is assigned the value of the column BusinessEntityID from the union of two tables. Wenn die SELECT-Anweisung mehr als einen Wert zurückgibt, wird der Variablen definitionsgemäß der zuletzt zurückgegebene Wert zugewiesen.By definition, when the SELECT statement returns more than one value, the variable is assigned the last value that is returned. In diesem Fall wird der Variablen der letzte Wert richtig zugewiesen, es wird jedoch auch das Resultset der SELECT UNION-Anweisung zurückgegeben.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;

Die Variablenzuweisung ist in einer Anweisung mit einem UNION-Operator auf der obersten Ebene nicht zulässig.Variable assignment is not allowed in a statement containing a top-level UNION operator. Der Fehler 10734 wird zurückgegeben.Error 10734 is returned. Um den Fehler zu beheben, müssen Sie die Abfrage umschreiben, wie im folgenden Beispiel gezeigt.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;

Weitere InformationenSee Also

Kompatibilitätszertifizierung Compatibility Certification
ALTER DATABASE ALTER DATABASE
Reservierte Schlüsselwörter Reserved Keywords
CREATE DATABASE CREATE DATABASE
DATABASEPROPERTYEX DATABASEPROPERTYEX
sys.databases sys.databases
sys.database_files sys.database_files
Anzeigen oder Ändern des Kompatibilitätsgrads einer Datenbank View or Change the Compatibility Level of a Database
Ändern des Datenbank-Kompatibilitätsmodus und Verwenden des Abfragespeichers Change the Database Compatibility Mode and use the Query Store
Upgraden von Datenbanken mit dem Abfrageoptimierungs-AssistentenUpgrading Databases by using the Query Tuning Assistant