Freigeben über


ALTER DATABASE (Transact-SQL): Kompatibilitätsgrad

Gilt für:SQL ServerAzure SQL-DatenbankVerwaltete Azure SQL-Instanz

Legt für Transact-SQL und Verhalten bei der Abfrageverarbeitung fest, dass sie mit der angegebenen Version der SQL-Engine kompatibel sein müssen. ALTER DATABASE Weitere Optionen finden Sie unter ALTER DATABASE.

Weitere Informationen zu Syntaxkonventionen finden Sie unter Transact-SQL-Syntaxkonventionen.

Syntax

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

Arguments

database_name

Der Name der Datenbank, die geändert werden soll.

COMPATIBILITY_LEVEL { 170 | 160 | 150 | 140 | 130 | 120 | 110 | 100 | 90 | 80 }

Die SQL Server-Version, mit der die Datenbank kompatibel sein soll. Die folgenden Kompatibilitätsgradwerte können konfiguriert werden (nicht alle Versionen unterstützen alle oben genannten Kompatibilitätsgrade):

Product Version der Datenbank-Engine Bestimmung des Kompatibilitätsgrads mit Standards Unterstützte Kompatibilitätsgradwerte
Azure SQL-Datenbank 17 170 170, 160, 150, 140, 130, 120, 110, 100
Verwaltete Azure SQL-Instanz
(Always-up-to-date update policy)
17 170 170, 160, 150, 140, 130, 120, 110, 100
Verwaltete Azure SQL-Instanz
(SQL Server 2025-Updaterichtlinie)
17 170 170, 160, 150, 140, 130, 120, 110, 100
Verwaltete Azure SQL-Instanz
(SQL Server 2022-Updaterichtlinie)
16 150 160, 150, 140, 130, 120, 110, 100
SQL Server 2025 (17.x) Vorschau 17 170 170, 160, 150, 140, 130, 120, 110, 100
SQL Server 2022 (16.x) 16 160 160, 150, 140, 130, 120, 110, 100
SQL Server 2019 (15.x) 15 150 150, 140, 130, 120, 110, 100
SQL Server 2017 (14.x) 14 140 140, 130, 120, 110, 100
SQL Server 2016 (13.x) 13 130 130, 120, 110, 100
SQL Server 2014 (12.x) 12 120 120, 110, 100
SQL Server 2012 (11.x) 11 110 110, 100, 90
SQL Server 2008 R2 (10.50.x) 10.5 100 100, 90, 80
SQL Server 2008 (10.0.x) 10 100 100, 90, 80
SQL Server 2005 (9.x) 9 90 90, 80
SQL Server 2000 (8.x) 8 80 80

Important

Die Versionsnummern des Datenbankmoduls für SQL Server und Azure SQL-Datenbank sind nicht miteinander vergleichbar und sind stattdessen interne Buildnummern für diese separaten Produkte. Das Datenbankmodul für Azure SQL-Datenbank basiert auf derselben Codebasis wie das SQL Server-Datenbankmodul. Entscheidend ist dabei, dass die Datenbank-Engine in Azure SQL-Datenbank immer über die neuesten SQL-Datenbank-Engine-Bits verfügt. Version 12 von Azure SQL-Datenbank ist neuer als Version 15 von SQL Server.

Bewährte Methoden zum Aktualisieren des Datenbank-Kompatibilitätsgrads

Den empfohlenen Workflow zum Upgraden des Kompatibilitätsgrads finden Sie unter Beibehalten der Leistungsstabilität während des Upgrades auf neuere SQL Server. Weitere Informationen zu einer unterstützten Erfahrung beim Aktualisieren der Datenbankkompatibilitätsstufe finden Sie unter Upgradedatenbanken mithilfe des Abfrageoptimierungs-Assistenten.

Remarks

Bei allen Installationen von SQL Server wird der Standardkompatibilitätsgrad von der Version von Datenbank-Engine abgeleitet. Neue Datenbanken sind auf diesen Grad festgelegt, sofern der Kompatibilitätsgrad der model-Datenbank nicht niedriger ist. Bei Datenbanken, die von einer früheren Version von SQL Server angefügt oder wiederhergestellt wurden, behält die Datenbank ihre vorhandene Kompatibilitätsstufe bei, wenn sie mindestens mindestens für diese Instanz von SQL Server zulässig ist. Beim Verschieben einer Datenbank, deren Kompatibilitätsgrad unterhalb des von der Datenbank-Engine festgelegten zulässigen Grads liegt, wird die Datenbank automatisch auf den niedrigsten zulässigen Kompatibilitätsgrad festgelegt. Dies gilt sowohl für die System- als auch für die Benutzerdatenbanken.

Die folgenden Verhaltensweisen werden für SQL Server 2017 (14.x) erwartet, wenn eine Datenbank angefügt oder wiederhergestellt wird, und nach einem direkten Upgrade:

  • War der Kompatibilitätsgrad einer Benutzerdatenbank vor dem Upgrade 100 oder höher, wird er nach dem Upgrade beibehalten.
  • 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) entspricht.
  • Der Kompatibilitätsgrad der Datenbanken tempdb, model, msdb und „Resource“ wird auf den Standardkompatibilitätsgrad für eine bestimmte Datenbank-Engine-Version festgelegt.
  • Die master-Systemdatenbank behält den Kompatibilitätsgrad von vor dem Upgrade bei. Dies wirkt sich nicht auf das Verhalten der Benutzerdatenbank aus.

Für bereits vorhandene Datenbanken, die auf niedrigeren Kompatibilitätsebenen ausgeführt werden, ist es ein gültiger Ansatz, um die vorherige Datenbankkompatibilitätsstufe beizubehalten, solange die Anwendung keine Verbesserungen verwenden muss, die nur auf einer höheren Datenbankkompatibilitätsebene verfügbar sind. Für neue Entwicklungsvorgänge oder wenn eine vorhandene Anwendung neue Features wie intelligente Abfrageverarbeitung in SQL-Datenbanken und einige neue Transact-SQL erfordert, planen Sie, die Datenbankkompatibilitätsstufe auf die neueste verfügbare Version zu aktualisieren. Weitere Informationen finden Sie unter Kompatibilitätsgrade und Upgrades der Datenbank-Engine.

Note

Wenn keine Benutzerobjekte und Abhängigkeiten vorhanden sind, ist es im Allgemeinen sicher, auf die Standardkompatibilitätsstufe zu aktualisieren. Weitere Informationen finden Sie unter Empfehlungen - Masterdatenbank.

Verwenden Sie ALTER DATABASE, um den Kompatibilitätsgrad der Datenbank zu ändern. 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.

Um die aktuelle Kompatibilitätsebene einer Datenbank anzuzeigen, fragen Sie die compatibility_level Spalte in der Sys.databases-Katalogansicht ab.

Eine Verteilungsdatenbank , die in einer früheren Version von SQL Server erstellt wurde und auf SQL Server 2016 (13.x) RTM oder Service Pack 1 aktualisiert wurde, weist eine Kompatibilitätsstufe von 90 auf, die für andere Datenbanken nicht unterstützt wird. Dies wirkt sich nicht auf die Funktionstüchtigkeit der Replikation aus. Ein Upgrade auf ein späteres Service Pack oder eine spätere Version von SQL Server führt dazu, dass der Kompatibilitätsgrad der Verteilungsdatenbank auf denjenigen der masterdatenbank erhöht wird.

Wenn Sie die Datenbankkompatibilitätsebene 120 oder höher insgesamt für eine Datenbank verwenden möchten, sich aber für das Kardinalitätsschätzungsmodell von SQL Server 2012 (11.x) entscheiden, das der Datenbankkompatibilitätsebene 110 zugeordnet ist, lesen Sie ALTER DATABASE SCOPED CONFIGURATION und insbesondere dessen Schlüsselwort LEGACY_CARDINALITY_ESTIMATION = ON.

Hinweise für Azure SQL

Die Standardkompatibilitätsstufe ist 170 für neu erstellte Datenbanken in Azure SQL-Datenbank und SQL-Datenbank in Microsoft Fabric Preview.

Die Standardkompatibilitätsstufe ist 150 für neu erstellte Datenbanken mit der SQL Server 2022-Updaterichtlinie des Azure SQL Managed Instance-Angebots.

Die Standardkompatibilitätsstufe ist 170 für neu erstellte Datenbanken mit dem Always-up-to-Datum oder der SQL Server 2025-Updaterichtlinie des Azure SQL Managed Instance-Angebots.

Microsoft aktualisiert nicht automatisch die Datenbankkompatibilitätsstufe für vorhandene Datenbanken. Es liegt an den Kunden, nach eigenem Ermessen zu tun.

Microsoft empfiehlt Kunden dringend, zum aktuellen Kompatibilitätsgrad zu wechseln, um die neuesten Verbesserungen bei der Abfrageoptimierung zu nutzen. Tipps zum Bewerten der Leistungsunterschiede Ihrer wichtigsten Abfragen zwischen zwei verschiedenen Kompatibilitätsstufen auf Azure SQL-Datenbank finden Sie unter "Verbesserte Abfrageleistung mit Kompatibilitätsebene 130" in Azure SQL-Datenbank. Dieser Artikel bezieht sich auf den Kompatibilitätsgrad 130 und SQL Server. Es gelten jedoch die gleichen Vorgehensweisen für Upgrades auf den Kompatibilitätsgrad 140 oder höher in SQL Server und Azure SQL-Datenbank.

Azure SQL-Datenbank unterstützt nicht alle Features, die nach Kompatibilitätsgrad variieren.

Aktuelle Kompatibilitätsstufe suchen

Um die aktuelle Kompatibilitätsstufe zu ermitteln, fragen Sie die compatibility_level Spalte von sys.databases ab.

SELECT [name],
       compatibility_level
FROM sys.databases;

Führen Sie die folgende Abfrage aus, um die Datenbank-Engine-Version zu bestimmen, mit der Sie verbunden sind.

SELECT SERVERPROPERTY('ProductVersion');

Kompatibilitätsgrade und Upgrades der Datenbank-Engine

Der Datenbank-Kompatibilitätsgrad ist ein wichtiges Tool zur Unterstützung der Datenbankmodernisierung, denn damit können Upgrades für die SQL Server-Datenbank-Engine durchgeführt werden, während der funktionale Status für anbindende Anwendungen erhalten bleibt, indem der vor einem Upgrade wirksame Kompatibilitätsgrad beibehalten wird. Eine ältere Version von SQL Server (z. B. SQL Server 2008 (10.0.x)) kann daher auf SQL Server oder Azure SQL-Datenbank (einschließlich Azure SQL Managed Instance) upgegradet werden, ohne dass Änderungen an Anwendungen (mit Ausnahme von Datenbankverbindungen) erforderlich sind. Weitere Informationen finden Sie unter Kompatibilitätszertifizierung.

Solange die Anwendung keine Verbesserungen verwenden muss, die nur auf einer höheren Datenbankkompatibilitätsebene verfügbar sind, ist es ein gültiger Ansatz, um das SQL Server-Datenbankmodul zu aktualisieren und die vorherige Datenbankkompatibilitätsstufe beizubehalten. Weitere Informationen zur Verwendung der Kompatibilitätsstufe für die Abwärtskompatibilität finden Sie unter Kompatibilitätszertifizierung.

Kompatibilitätsgrade und gespeicherte Prozeduren

Wenn eine gespeicherte Prozedur ausgeführt wird, verwendet sie den aktuellen Kompatibilitätsgrad der Datenbank, in der sie definiert ist. Wenn die Kompatibilitätseinstellung einer Datenbank geändert wird, werden alle zugehörigen gespeicherten Prozeduren automatisch entsprechend neu kompiliert.

Verwenden des Kompatibilitätsgrads für Abwärtskompatibilität

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

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. Das Ziel sollte es sein, zu einem bestimmten Zeitpunkt auf die neueste Kompatibilitätsstufe zu aktualisieren, um einige der neuen Features wie intelligente Abfrageverarbeitung in SQL-Datenbanken zu erben, aber dies auf kontrollierte Weise zu tun.

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.

  • In einer bestimmten SQL Server-Version eingeführte nicht mehr vorhandene Funktionen sind durch Kompatibilitätsstufe geschützt. Dies bezieht sich auf Funktionalität, die aus der SQL Server-Datenbank-Engine entfernt wurde. Der FASTFIRSTROW-Hinweis wurde beispielweise in SQL Server 2012 (11.x) nicht mehr unterstützt und durch den OPTION (FAST n )-Hinweis ersetzt. Wenn der Datenbank-Kompatibilitätsgrad auf 110 festgelegt wird, wird der nicht mehr unterstützte Hinweis nicht wiederhergestellt. Weitere Informationen zu nicht mehr verfügbaren Funktionen finden Sie unter "Nicht mehr vorhandene Datenbankmodulfunktionen" in SQL Server.

  • Unterbrechungen , die in einer bestimmten SQL Server-Version eingeführt wurden, sind möglicherweise nicht durch Kompatibilitätsstufe geschützt. Dies bezieht sich auf Verhaltensänderungen zwischen Versionen der SQL Server-Datenbank-Engine. Das Verhalten von Transact-SQL wird normalerweise durch den Kompatibilitätsgrad geschützt. Geänderte oder entfernte Systemobjekte sind jedoch nicht durch Kompatibilitätsstufe geschützt.

    Ein Beispiel für eine bahnbrechende Änderung, die durch Kompatibilitätsebene geschützt ist, ist eine implizite Konvertierung von datetime in datetime2-Datentypen . Unter dem Datenbankkompatibilitätsgrad 130 ergibt daraus eine verbesserte Genauigkeit, indem die Bruchteile von Millisekunden berücksichtigt werden, wodurch sich unterschiedliche konvertierte Werte ergeben. Legen Sie zum Wiederherstellen des vorherigen Konvertierungsverhaltens den Kompatibilitätsgrad der Datenbank auf 120 oder niedriger fest.

    Beispiele für nicht durch Kompatibilitätsstufe geschützte Änderungen sind:

Unterschiede zwischen Kompatibilitätsgraden

Für alle Installationen von SQL Server ist die Standardkompatibilitätsstufe der Version des Datenbankmoduls zugeordnet, wie in dieser Tabelle dargestellt. Planen Sie für neue Entwicklungsprojekte immer die Zertifizierung der Anwendungen auf den aktuellsten Datenbank-Kompatibilitätsgrad.

Die Transact-SQL-Syntax wird nicht durch den Datenbank-Kompatibilitätsgrad abgegrenzt, solange sie keine bestehenden Anwendungen beschädigen kann, weil sie zu einem Konflikt mit Transact-SQL-Benutzercode führt. Diese Ausnahmen werden in den nächsten Abschnitten dieses Artikels dokumentiert. In diesen werden die Unterschiede zwischen bestimmten Kompatibilitätsgraden erläutert.

Der Datenbank-Kompatibilitätsgrad bietet zudem Abwärtskompatibilität mit früheren Versionen von SQL Server, da angefügte oder aus älteren Versionen von SQL Server wiederhergestellte Datenbanken ihren vorhandenen Kompatibilitätsgrad beibehalten, sofern dieser dem mindestens zulässigen Kompatibilitätsgrad oder höher entspricht. Diese Vorgehensweise wurde im Abschnitt Verwenden des Kompatibilitätsgrads für Abwärtskompatibilität bereits erläutert.

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

Diese grundlegenden Änderungen, die sich auf den Plan auswirken, werden nur zum Standardkompatibilitätsgrad einer neuen Version von Datenbank-Engine hinzugefügt:

  1. Fixes für den Abfrageoptimierer, die für vorherige Versionen von SQL Server unter dem Ablaufverfolgungsflag 4199 veröffentlicht wurden, werden im Standardkompatibilitätsgrad einer neueren Version von SQL Server automatisch aktiviert.

    Gilt für: SQL Server (Ab Version SQL Server 2016 (13.x)), Azure SQL-Datenbank.

    Als SQL Server 2016 (13.x) veröffentlicht wurde, wurden beispielsweise alle Fixes für den Abfrageoptimierer, die für vorherige Versionen von SQL 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) (130) verwenden. Nur Fixes für den Abfrageoptimierer, die für Versionen nach RTM gelten, müssen explizit aktiviert werden.

    Sie können folgende Methoden verwenden, um Fixes für den Abfrageoptimierer zu aktivieren:

    Als SQL Server 2017 (14.x) dann veröffentlicht wurde, wurden alle Fixes für den Abfrageoptimierer, die nach SQL Server 2016 (13.x) RTM veröffentlicht wurden, automatisch für Datenbanken aktiviert, die den Standardkompatibilitätsgrad von SQL Server 2017 (14.x) (140) verwenden. Dabei handelt es sich um kumulatives Verhalten, das auch alle früheren Versionen der Fixes enthält. Auch hier müssen nur Fixes für den Abfrageoptimierer, die für Post-RTM gelten, explizit aktiviert werden.

    In der folgenden Tabelle wird dieses Verhalten zusammengefasst:

    Version der Datenbank-Engine Datenbank-Kompatibilitätsgrad TF 4199 Abfrageoptimierer-Änderungen aus früheren Datenbank-Kompatibilitätsgraden QO-Änderungen für (DE)-Version nach RTM
    13 (SQL Server 2016 (13.x)) 100 bis 120


    130
    Off
    On
    Off
    On
    Disabled
    Enabled
    Enabled
    Enabled
    Disabled
    Enabled
    Disabled
    Enabled
    14 (SQL Server 2017 (14.x)) 100 bis 120


    130
    140
    Off
    On
    Off
    On
    Off
    On
    Disabled
    Enabled
    Enabled
    Enabled
    Enabled
    Enabled
    Disabled
    Enabled
    Disabled
    Enabled
    Disabled
    Enabled
    15 (SQL Server 2019 (15.x)) und (Azure SQL-Datenbank) 100 bis 120


    130 bis 140
    150
    Off
    On
    Off
    On
    Off
    On
    Disabled
    Enabled
    Enabled
    Enabled
    Enabled
    Enabled
    Disabled
    Enabled
    Disabled
    Enabled
    Disabled
    Enabled
    16 (SQL Server 2022 (16.x)) und (Azure SQL-Datenbank) 100 bis 120


    130 bis 150
    160
    Off
    On
    Off
    On
    Off
    On
    Disabled
    Enabled
    Enabled
    Enabled
    Enabled
    Enabled
    Disabled
    Enabled
    Disabled
    Enabled
    Disabled
    Enabled
    17 (SQL Server 2025 (17.x) Vorschau, Azure SQL-Datenbank und SQL-Datenbank in Microsoft Fabric Preview) 100 bis 120


    130 bis 160
    170
    Off
    On
    Off
    On
    Off
    On
    Disabled
    Enabled
    Enabled
    Enabled
    Enabled
    Enabled
    Disabled
    Enabled
    Disabled
    Enabled
    Disabled
    Enabled

    Fixes für den Abfrageoptimierer, die falsche Ergebnisse oder Fehler durch Zugriffsverletzungen beheben, werden nicht durch das Ablaufverfolgungsflag 4199 geschützt. Diese Fixes sind nicht optional.

  2. Änderungen an der Kardinalitätsschätzung , die in SQL Server, Azure SQL-Datenbank und SQL-Datenbank in Microsoft Fabric Preview veröffentlicht wurde, werden nur in der Standardkompatibilitätsebene einer neuen Datenbankmodulversion, aber nicht auf vorherigen Kompatibilitätsstufen aktiviert.

    Als 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) (130) verwendet haben. Für frühere Kompatibilitätsgrade wurde das Verhalten der Kardinalitätsschätzung beibehalten, das vor SQL Server 2016 (13.x) verfügbar war.

    Als 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) (140) verwendet haben. Für den Datenbank-Kompatibilitätsgrad 130 wurde das Verhalten der Kardinalitätsschätzung von SQL Server 2016 (13.x) beibehalten.

    In der folgenden Tabelle wird dieses Verhalten zusammengefasst:

    Version der Datenbank-Engine Datenbank-Kompatibilitätsgrad Änderungen an neueren Versionen der Kardinalitätsschätzung
    13 (SQL Server 2016 (13.x)) < 130
    130
    Disabled
    Enabled
    14 (SQL Server 2017 (14.x))1 < 140
    140
    Disabled
    Enabled
    15 (SQL Server 2019 (15.x))1 < 150
    150
    Disabled
    Enabled
    16 (SQL Server 2022 (16.x))1 < 160
    160
    Disabled
    Enabled
    17 (SQL Server 2025 (17.x) Vorschau)1 < 170
    170
    Disabled
    Enabled

    1 Gilt auch für Azure SQL-Datenbank und SQL-Datenbank in Microsoft Fabric Preview.

Weitere Unterschiede zwischen den einzelnen Kompatibilitätsgraden werden in den nächsten Abschnitten dieses Artikels behandelt.

Unterschiede zwischen Kompatibilitätsebene 160 und Ebene 170

In diesem Abschnitt werden neue Verhaltensweisen beschrieben, die mit Kompatibilitätsebene 170 eingeführt wurden.

Einstellung der Kompatibilitätsebene von 160 oder niedriger Einstellung der Kompatibilitätsebene von 170
Um das Schlüsselmaterial des symmetrischen Schlüssels zu schützen, speichert SQL Server und Azure SQL das Schlüsselmaterial in verschlüsselter Form. Die Verschlüsselung verwendet DEN PKCS#1 v1.5-Abstandsmodus. Um das Schlüsselmaterial des symmetrischen Schlüssels zu schützen, speichert SQL Server und Azure SQL das Schlüsselmaterial in verschlüsselter Form. Die Verschlüsselung verwendet den OAEP-256-Abstandsmodus. Im dm_database_encryption_keys wird die encryptor_type anstelle CERTIFICATE_OAEP_256 von CERTIFICATE.
Reguläre Ausdrücke können verwendet werden, um komplexe Muster abzugleichen und Daten in sql Server- und Azure SQL-Datenbank zu bearbeiten. Unterstützung regulärer Ausdrücke in T-SQL wurde hinzugefügt. Einige funktionen für reguläre Ausdrücke sind in allen Datenbankkompatibilitätsstufen nicht verfügbar. Weitere Informationen finden Sie in der Vorschau der Funktionen für reguläre Ausdrücke. Reguläre Ausdrucksfunktionen wie REGEXP_LIKE, REGEXP_MATCHESund REGEXP_SPLIT_TO_TABLE wurden eingeführt, um Musterabgleich, Extraktion und Aufteilung direkt in T-SQL zu ermöglichen.
Die Möglichkeit zum Erstellen von KI-Einbettungen (Vektorarrays) aus Textausdrücken wurde das Datenbankmodul hinzugefügt. Weitere Informationen finden Sie unter KI-Funktionen. Führt die Funktion ein, mit der AI_GENERATE_CHUNKS Texteingaben für den KI-Modellverbrauch geblockt und die Integration mit KI-Diensten verbessert wird.
Parameterisierte Abfragen können mehrere zwischengespeicherte Abfragepläne für verschiedene Auswahlkategorien eines Parameters haben. Parametersensitive Planoptimierung ist standardmäßig in Kompatibilitätsebene 160 für ausgewählte Abfragen aktiviert. Wenn parametersensitive Planoptimierung unter Kompatibilitätsebene 170 ausgeführt wird, steht auch die DML-Abfrageunterstützung sowie unterstützung für tempdb
Parametrisierte Abfragen mit optionalen Parametern können aufgrund von Parameterniffing unter suboptimalen Plänen leiden. Abfrageplanoptimierung für optionale Parameter, Verbesserung der Leistung durch Generieren geeigneterer Pläne für NULL- und Nicht-NULL-Werte.

Unterschiede zwischen Kompatibilitätsgrad 150 und Kompatibilitätsgrad 160

In diesem Abschnitt werden neue mit Kompatibilitätsgrad 160 eingeführte Verhaltensweisen beschrieben.

Kompatibilitätsgradeinstellung 150 oder niedriger Kompatibilitätsgradeinstellung 160
Parameterisierte Abfragen verfügen über einen einzelnen Abfrageplan basierend auf den Parametern, die für die erste Ausführung verwendet werden. Nur ein Abfrageplan wird zwischengespeichert und für alle Parameterwerte verwendet. Dies kann dazu führen, dass ein Abfrageplan für einige Werte des Parameters ineffizient sein kann, auch als Parameter-empfindlicher Plan bezeichnet. Parameterisierte Abfragen können mehrere zwischengespeicherte Abfragepläne für verschiedene Auswahlkategorien eines Parameters haben. Die Optimierung Parameter-empfindlicher Pläne ist standardmäßig in Kompatibilitätsebene 160 aktiviert. Weitere Informationen finden Sie unter PSP-Optimierung.
Die Kardinalitätsschätzung verwendet nur einen Standardsatz von Modellannahmen über die zugrunde liegenden Datenverteilungs- und Nutzungsmuster für alle Datenbanken und Abfragen. Die einzige Möglichkeit, eine dieser Annahmen zu ändern oder anzupassen, besteht darin, dass der Benutzer einen manuellen Prozess durchführt, um mithilfe von Abfragehinweisen explizit anzugeben, welche Modellannahmen verwendet werden sollten. Es kann keine interne Anpassung an dieses Standardmodell vorgenommen werden, nachdem ein Abfrageplan generiert wurde. Die Kardinalitätsschätzung beginnt mit der Standardmenge von Modellannahmen über die zugrunde liegenden Datenverteilungs- und Nutzungsmuster, aber nach einigen Ausführungen für eine bestimmte Abfrage lernt die Microsoft SQL Server-Datenbank-Engine, welche unterschiedlichen Mengen von Modellannahmen möglicherweise genauere Schätzungen liefern und passt daher die verwendeten Annahmen an, damit sie besser zu dem abgefragten Datensatz passen. CE-Feedback ist standardmäßig in Kompatibilitätsstufe 160 aktiviert. Weitere Informationen finden Sie unter Feedback zur Kardinalitätsschätzung (CE).
Es wird keine automatische Bestimmung des optimalen Grads an Parallelismus durch die Microsoft SQL Server-Datenbank-Engine versucht. Informationen zum manuellen Steuern des maximalen Parallelitätsgrads (MAXDOP) auf Instanz-, Datenbank-, Abfrage- oder Workloadebene finden Sie unter Serverkonfiguration: max. Parallelitätsgrad Das Grad an Parallelismus-(DOP-)Feedback verbessert die Abfrageleistung, indem Parallelismus-Ineffizienzen basierend auf verstrichener Zeit und Wartezeiten für wiederholte Abfragen identifiziert werden. Wenn die Parallelitätsnutzung als ineffizient erachtet wird, verringert das DOP-Feedback die DOP für die nächste Ausführung der Abfrage ausgehend von der konfigurierten DOP, und überprüft, ob dies hilfreich war. DOP-Feedback ist standardmäßig nicht aktiviert. Um DOP-Feedback zu aktivieren, aktivieren Sie die DOP_FEEDBACK Datenbankweit gültige Konfiguration in einer Datenbank. Weitere Informationen finden Sie unter DoP-Feedback (Grad of Parallelism).

Unterschiede zwischen Kompatibilitätsgrad 140 und Kompatibilitätsgrad 150

In diesem Abschnitt werden neue mit Kompatibilitätsgrad 150 eingeführte Verhaltensweisen beschrieben.

Kompatibilitätsgradeinstellung 140 oder niedriger Kompatibilitätsgradeinstellung 150
Relationale Data Warehouse- und Analyseworkloads können möglicherweise aufgrund von OLTP-Overhead, fehlender Anbieterunterstützung oder anderen Einschränkungen möglicherweise keine Columnstore-Indizes verwenden. Ohne Columnstore-Indizes können diese Workloads nicht vom Batchausführungsmodus profitieren. Der Batchausführungsmodus ist nun für Analyseworkloads verfügbar, ohne dass Columnstore-Indizes erforderlich sind. Weitere Informationen finden Sie unter Batchmodus bei Rowstore.
Zeilenmodusabfragen, die unzureichende Speichererteilungsgrößen anfordern, die zu Überlappungen auf dem Datenträger führen, können weiterhin Probleme mit aufeinanderfolgenden Ausführungen haben. Zeilenmodusabfragen, die unzureichende Speichererteilungsgrößen anfordern, die zu Überlappungen auf dem Datenträger führen, haben möglicherweise die Leistung bei aufeinander folgenden Ausführungen verbessert. Weitere Informationen finden Sie unter Feedback zur Speicherzuweisung im Zeilenmodus.
Zeilenmodusabfragen, die eine übermäßige Größe der Speichererteilung anfordern, die zu Parallelitätsproblemen führt, können weiterhin Probleme mit aufeinander folgenden Ausführungen aufweisen. Zeilenmodusabfragen, die eine übermäßige Größe der Speichererteilung anfordern, die zu Parallelitätsproblemen führt, haben möglicherweise die Parallelität bei aufeinander folgenden Ausführungen verbessert. Weitere Informationen finden Sie unter Feedback zur Speicherzuweisung im Zeilenmodus.
Abfragen, die auf TSQL_SCALAR_UDFs verweisen, verwenden einen iterativen Aufruf, verursachen keine Kosten und erzwingen die serielle Ausführung. Benutzerdefinierte T-SQL-Skalarfunktionen werden in äquivalente relationale Ausdrücke umgewandelt, die inline in die aufrufende Abfrage eingefügt werden, was meist zu erheblichen Leistungsverbesserungen führt. Weitere Informationen finden Sie unter TSQL_SCALAR_UDF_INLINING.
Tabellenvariablen nutzen für die Kardinalitätsschätzung eine festgelegte Schätzung. 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. Neue Pläne verwenden anstelle einer festgelegten Schätzung die tatsächliche Kardinalität der Tabellenvariablen, die bei der ersten Kompilierung vorgefunden wird. Weitere Informationen finden Sie unter Verzögerte Kompilierung von Tabellenvariablen.

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

Unterschiede zwischen Kompatibilitätsgrad 130 und Kompatibilitätsgrad 140

In diesem Abschnitt werden neue mit Kompatibilitätsgrad 140 eingeführte Verhaltensweisen beschrieben.

Kompatibilitätsgradeinstellung 130 oder niedriger Kompatibilitätsgradeinstellung 140
Bei Kardinalitätsschätzungen für Anweisungen, die auf Tabellenwertfunktionen mit mehreren Anweisungen verweisen, wird eine feste Zeilenvorhersage verwendet. 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. Dies ist über die interleavierte Ausführung für Tabellenwertfunktionen mit mehreren Anweisungen aktiviert.
Batchmodusabfragen, die unzureichende Speichererteilungsgrößen anfordern, die zu Überlappungen auf dem Datenträger führen, können weiterhin Probleme mit aufeinander folgenden Ausführungen haben. Batchmodusabfragen, die unzureichende Speicherzuteilungsgrößen anfordern, die zu Überlappungen auf dem Datenträger führen, haben möglicherweise die Leistung bei aufeinander folgenden Ausführungen verbessert. 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.
Batchmodusabfragen, die eine übermäßige Größe der Speicherzuteilung anfordern, die zu Parallelitätsproblemen führt, können weiterhin Probleme bei aufeinander folgenden Ausführungen aufweisen. Batchmodusabfragen, die eine übermäßige Größe der Speicherzuteilung anfordern, die zu Parallelitätsproblemen führt, haben möglicherweise die Parallelität bei aufeinander folgenden Ausführungen verbessert. 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.
Abfragen im Batchmodus, die Verknüpfungsoperatorrn enthalten, sind für drei physische LOIN-Algorithmen geeignet, zu denen geschachtelte Schleifen, Hashjoins und Mergejoins zählen. Wenn Kardinalitätsschätzungen für Verknüpfungseingaben falsch sind, kann ein unangemessener Verknüpfungsalgorithmus ausgewählt werden. Dies hat negative Auswirkungen auf die Leistung. Zudem wird der ungeeignete JOIN-Algorithmus so lange weiter verwendet, bis der zwischengespeicherte Plan erneut kompiliert wurde. Es gibt einen zusätzlichen Verknüpfungsoperator, der als adaptive Verknüpfung bezeichnet wird. Wenn Kardinalitätsschätzungen für die Eingabe der äußeren Build-Verknüpfung falsch sind, wird möglicherweise ein unangemessener Verknüpfungsalgorithmus ausgewählt. 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.
Triviale Pläne, die auf Columnstore-Indizes verweisen, sind für eine Ausführung im Batchmodus nicht geeignet. Ein trivialer Plan, der auf Columnstore-Indizes verweist, wird zugunsten eines Plans gelöscht, der für eine Ausführung im Batchmodus geeignet ist.
Der sp_execute_external_script-UDX-Operator kann nur im Zeilenmodus ausgeführt werden. Der sp_execute_external_script-UDX-Operator ist für eine Ausführung im Batchmodus geeignet.
Tabellenwertfunktionen (Table-Valued Functions, TVFs) mit mehreren Anweisungen haben keine verschachtelte Ausführung. Verschachtelte Ausführung für Tabellenwertfunktionen mit mehreren Anweisungen zur Verbesserung der Planqualität.

Fixes unter dem Ablaufverfolgungsflag 4199 in früheren Versionen von SQL Server vor SQL Server 2017 sind jetzt standardmäßig aktiviert. Mit Kompatibilitätsmodus 140. Das Ablaufverfolgungsflag 4199 gilt weiterhin für Fixes für den neuen Abfrageoptimierer, die nach SQL Server 2017 veröffentlicht werden. Informationen zum Ablaufverfolgungsflag 4199 finden Sie unter Ablaufverfolgungsflag 4199.

Unterschiede zwischen Kompatibilitätsgrad 120 und Kompatibilitätsgrad 130

In diesem Abschnitt werden neue mit Kompatibilitätsgrad 130 eingeführte Verhaltensweisen beschrieben.

Kompatibilitätsgradeinstellung 120 oder niedriger Kompatibilitätsgradeinstellung 130
Die INSERT in einer INSERT-SELECT Anweisung ist singlethreaded. Die INSERT Anweisung in einer INSERT-SELECT Anweisung ist multithreaded oder kann über einen parallelen Plan verfügen.
Abfragen für eine speicheroptimierte Tabelle werden in einem einzelnen Thread ausgeführt. Abfragen für eine speicheroptimierte Tabelle können jetzt parallele Pläne aufweisen.
Die SQL 2014-Kardinalitätsschätzung wurde eingeführt. CardinalityEstimationModelVersion="120" Weitere Verbesserungen der Kardinalitätsschätzung im Kardinalitätsschätzungsmodell 130, das in einem Abfrageplan angezeigt werden kann. CardinalityEstimationModelVersion="130"
Änderungen des Batchmodus im Vergleich zu Änderungen des Zeilenmodus mit Columnstore-Indizes:
  • Sortierungen in einer Tabelle mit Columnstore-Index weisen einen Zeilenmodus auf
  • Fensterfunktionsaggregate werden in einem Zeilenmodus wie LAG oder LEAD ausgeführt
  • Abfragen in Columnstore-Tabellen mit mehreren unterschiedlichen, im Zeilenmodus ausgeführten Klauseln
  • Abfragen, die unter MAXDOP 1 oder mit einem seriellen Plan ausgeführt werden, der im Zeilenmodus ausgeführt wird
Änderungen des Batchmodus im Vergleich zu Änderungen des Zeilenmodus mit Columnstore-Indizes:
  • Sortierungen in einer Tabelle mit einem Columnstore-Index weisen jetzt einen Batchmodus auf
  • Fensteraggregate werden jetzt in einem Batchmodus wie LAG oder LEAD ausgeführt
  • Abfragen für Columnstore-Tabellen mit mehreren unterschiedlichen, im Batchmodus ausgeführten Klauseln
  • Abfragen, die unter MAXDOP 1 oder mit einem seriellen Plan ausgeführt werden, werden im Batchmodus ausgeführt
Statistiken können automatisch aktualisiert werden. Die Logik, die Statistiken automatisch aktualisiert, ist bei umfangreichen Tabellen aggressiver. 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.
Ablaufverfolgung 2371 ist OFF standardmäßig in SQL Server 2014 (12.x) enthalten. Ablaufverfolgungskennzeichnung 2371 ist ON standardmäßig in SQL Server 2016 (13.x) enthalten. 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.

Eine Verbesserung besteht darin, in der Stichprobe mehr Zeilen einzubeziehen, die kürzlich eingefügt wurden.

Eine weitere Verbesserung besteht darin, Abfragen während des Prozesses der Statistikaktualisierung nicht zu blockieren, sondern weiter auszuführen.
Für den Kompatibilitätsgrad 120 werden in einem Singlethreadprozess Stichproben aus Statistiken entnommen. Für den Kompatibilitätsgrad 130 werden in einem Multithreadprozess Stichproben aus Statistiken entnommen.
Der Grenzwert liegt bei 253 eingehenden Fremdschlüsseln. Bis zu 10.000 eingehende Fremdschlüssel oder vergleichbare Referenzen können auf eine bestimmte Tabelle verweisen. Einschränkungen finden Sie unter Erstellen von Fremdschlüsselbeziehungen.
Die als veraltet markierten Hashalgorithmen MD2, MD4, MD5, SHA und SHA1 sind zulässig. Nur die Hashalgorithmen SHA2_256 und SHA2_512 sind zulässig.
SQL Server 2016 (13.x) schließt Verbesserungen bei einigen Datentypkonvertierungen und einigen Vorgängen (eher selten) ein. Ausführliche Informationen finden Sie unter SQL Server- und Azure SQL-Datenbankverbesserungen bei der Behandlung einiger Datentypen und ungewöhnlicher Vorgänge.
Die Funktion STRING_SPLIT ist nicht verfügbar. Die Funktion STRING_SPLIT steht für den Kompatibilitätsgrad 130 oder höher zur Verfügung. Wenn der Kompatibilitätsgrad Ihrer Datenbank niedriger als 130 ist, kann SQL Server die STRING_SPLIT-Funktion nicht suchen und ausführen.

Fixes unter dem Ablaufverfolgungsflag 4199 in früheren Versionen von SQL Server vor SQL Server 2016 (13.x) sind jetzt standardmäßig aktiviert. Mit Kompatibilitätsmodus 130. Das Ablaufverfolgungsflag 4199 gilt weiterhin für Fixes für den neuen Abfrageoptimierer, die nach SQL Server 2016 (13.x) veröffentlicht werden. Für die Verwendung des älteren Abfrageoptimierers in SQL-Datenbank müssen Sie den Kompatibilitätsgrad 110 auswählen. Informationen zum Ablaufverfolgungsflag 4199 finden Sie unter Ablaufverfolgungsflag 4199.

Unterschiede zwischen niedrigeren Kompatibilitätsgraden und Kompatibilitätsgrad 120

In diesem Abschnitt werden neue mit Kompatibilitätsgrad 120 eingeführte Verhaltensweisen beschrieben.

Kompatibilitätsgradeinstellung 110 oder niedriger Kompatibilitätsgradeinstellung 120
Der ältere Abfrageoptimierer wird verwendet. SQL Server 2014 (12.x) schließt deutliche Verbesserungen der Komponente zum Erstellen und Optimieren von Abfrageplänen ein. Diese neue Funktion des Abfrageoptimierers ist nur bei Verwendung des Datenbank-Kompatibilitätsgrads 120 verfügbar. Damit diese Verbesserungen optimal genutzt werden können, sollten neue Datenbankanwendungen mit dem Datenbank-Kompatibilitätsgrad 120 entwickelt werden. Von früheren SQL Server-Versionen migrierte Anwendungen sollten sorgfältig daraufhin überprüft werden, ob die bisherige gute Leistung aufrechterhalten bzw. verbessert wird. 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.

Der Datenbank-Kompatibilitätsgrad 120 verwendet eine neue Kardinalitätsschätzung, die für moderne Data Warehousing- und OLTP-Arbeitsauslastungen optimiert ist. Bevor Sie die Datenbankkompatibilitätsstufe aufgrund von Leistungsproblemen auf 110 festlegen, lesen Sie die Empfehlungen im Abschnitt "Abfragepläne " der Neuerungen in SQL Server 2016.
In Kompatibilitätsebenen unter 120 wird die Spracheinstellung beim Konvertieren eines Datumswerts in einen Zeichenfolgenwert ignoriert. Dieses Verhalten ist nur für den Datumstyp spezifisch. Siehe Beispiel B im Abschnitt "Beispiele ". Die Spracheinstellung wird beim Konvertieren eines Datumswerts in einen Zeichenfolgenwert nicht ignoriert.
Rekursive Verweise auf der rechten Seite einer EXCEPT-Klausel erzeugen eine Endlosschleife. Beispiel C im Abschnitt "Beispiele " veranschaulicht dieses Verhalten. Rekursive Verweise in einer EXCEPT Klausel generieren einen Fehler in Übereinstimmung mit dem ANSI SQL-Standard.
Der rekursive allgemeine Tabellenausdruck (Common Table Expression, CTE) lässt doppelte Spaltennamen zu. Der rekursive CTE lässt keine doppelten Spaltennamen zu.
Deaktivierte Trigger werden aktiviert, wenn die Trigger geändert werden. Das Ändern eines Triggers ändert nicht den Status (deaktiviert oder aktiviert) des Triggers.
Die OUTPUT INTO Tabellenklausel ignoriert die IDENTITY_INSERT SETTING = OFF expliziten Werte und lässt das Einfügen expliziter Werte zu. Sie können keine expliziten Werte für eine Identitätsspalte in eine Tabelle einfügen, wenn IDENTITY_INSERT sie auf 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. 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.
Durch eine SELECT INTO-Anweisung wird immer ein Singlethread-Einfügevorgang erstellt. Durch eine SELECT INTO-Anweisung kann ein paralleler Einfügevorgang erstellt werden. Beim Einfügen einer großer Anzahl von Zeilen kann die Leistung durch den parallelen Vorgang verbessert werden.

Unterschiede zwischen niedrigeren Kompatibilitätsgraden und den Kompatibilitätsgraden 100 und 110

In diesem Abschnitt werden neue mit Kompatibilitätsgrad 110 eingeführte Verhaltensweisen beschrieben. Dieser Abschnitt bezieht sich auch auf höhere Kompatibilitätsgrade als 110.

Kompatibilitätsgradeinstellung 100 oder niedriger Kompatibilitätsgradeinstellung 110 oder höher
Common Language Runtime (CLR)-Datenbankobjekte werden mit Version 4 der CLR ausgeführt. Einige in Version 4 der CLR eingeführte Verhaltensänderungen werden jedoch vermieden. Weitere Informationen finden Sie unter Neuigkeiten in der CLR-Integration? CLR-Datenbankobjekte werden mit Version 4 der CLR ausgeführt.
Die XQuery-Funktionen umfassen Zeichenfolgenlänge und Teilzeichenfolgenanzahl jeder Ersatz als zwei Zeichen. Die XQuery-Funktionen zählen Zeichenfolgenlänge und Teilzeichenfolgen zählen jedes Ersatz 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. Die Abfrage gibt jedoch falsche Ergebnisse zurück, wenn mehrere Zeilen pro Gruppierung vorhanden sind. PIVOT ist in einer Abfrage für einen rekursiven allgemeinen Tabellenausdruck (Common Table Expression, CTE) nicht zulässig. Es wird ein Fehler zurückgegeben.
Der RC4-Algorithmus wird nur aus Gründen der Abwärtskompatibilität unterstützt. Neues Material kann nur mit RC4 oder RC4_128 verschlüsselt werden, wenn die Datenbank den Kompatibilitätsgrad 90 oder 100 besitzt. (Nicht empfohlen.) In SQL Server 2012 (11.x) kann mit RC4 oder RC4_128 verschlüsseltes Material in jedem Kompatibilitätsgrad entschlüsselt werden. Neues Material kann nicht mit RC4 oder RC4_128 verschlüsselt werden. Verwenden Sie stattdessen einen neueren Algorithmus, z. B. einen der AES-Algorithmen. In SQL Server 2012 (11.x) kann mit RC4 oder RC4_128 verschlüsseltes Material in jedem Kompatibilitätsgrad entschlüsselt werden.
Die Standardformatvorlage für Und CAST Vorgänge für CONVERTZeit- und Datetime2-Datentypen ist 121, außer wenn beide Typen in einem berechneten Spaltenausdruck verwendet werden. Für berechnete Spalten ist das Standardformat 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.

Beispiel D im Abschnitt "Beispiele " zeigt den Unterschied zwischen den Formatvorlagen 0 und 121. Das oben beschriebene Verhalten wird nicht veranschaulicht. Weitere Informationen zu Datums - und Uhrzeitformatvorlagen finden Sie unter CAST und CONVERT.
Unter Kompatibilitätsebene 110 ist der Standardstil für CAST Und CONVERT Vorgänge für Uhrzeit - und Datetime2-Datentypen immer 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.

Ein Update der Datenbank auf Kompatibilitätsgrad 110 ändert keine Benutzerdaten, die auf dem Datenträger gespeichert wurden. Sie müssen diese Daten entsprechend manuell korrigieren. 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. Sie müssen diese Daten manuell aktualisieren, um sie an das Format 121 anzupassen.
Der Operator +(Addition) kann auf einen Operanden vom Typ "Datum", "Uhrzeit", "datetime2" oder " datetime" angewendet werden, wenn der andere Operand den Typ "datetime " oder " smalldatetime" aufweist. Wenn Sie versuchen, den Additionsoperator auf einen Operanden vom Typ "Datum", "Uhrzeit", "Datetime2" oder "datetime" anzuwenden, und ein Operand vom Typ "datetime" oder "smalldatetime" führt zu Fehler 402.
Alle Spalten in Remotetabellen vom Typ "smalldatetime ", auf die in einer partitionierten Ansicht verwiesen wird, werden als Datetime zugeordnet. Entsprechende Spalten in lokalen Tabellen (in derselben Ordnungsposition in der Auswahlliste) müssen vom Typ "datetime" sein. Alle Spalten in Remotetabellen vom Typ "smalldatetime ", auf die in einer partitionierten Ansicht verwiesen wird, werden als "smalldatetime" zugeordnet. Die entsprechenden Spalten in lokalen Tabellen (in derselben Ordnungsposition in der Auswahlliste) müssen vom Typ "smalldatetime" sein.

Nach dem Upgrade auf 110 schlägt die verteilte partitionierte Sicht wegen des Datentypkonflikts fehl. Sie können dies beheben, indem Sie den Datentyp in der Remotetabelle in "datetime " ändern oder die Kompatibilitätsebene der lokalen Datenbank auf 100 oder niedriger festlegen.
Die SOUNDEX-Funktion implementiert die folgenden Regeln:

1) H oder W in Großbuchstaben werden beim Trennen von zwei Konsonanten ignoriert, welche die gleiche Zahl im SOUNDEX-Code aufweisen.

2) Wenn die ersten beiden Zeichen von character_expression dieselbe Zahl im SOUNDEX Code haben, werden beide Zeichen eingeschlossen. Wenn ein Satz nebeneinander liegender Konsonanten die gleiche Zahl im SOUNDEX-Code aufweist, werden andernfalls alle Zeichen außer dem ersten Zeichen ausgeschlossen.
Die SOUNDEX-Funktion implementiert die folgenden Regeln:

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.

2) Wenn ein Satz nebeneinander liegender Konsonanten die gleiche Zahl im SOUNDEX-Code aufweist, werden andernfalls alle Zeichen außer dem ersten Zeichen ausgeschlossen.

Die zusätzlichen Regeln können dazu führen, dass die von der SOUNDEX Funktion berechneten Werte von den unter früheren Kompatibilitätsstufen berechneten Werten abweichen. Nach dem Upgrade auf Kompatibilitätsebene 110 müssen Sie möglicherweise die Indizes, Heaps oder CHECK Einschränkungen neu erstellen, die die SOUNDEX Funktion verwenden. Weitere Informationen finden Sie unter SOUNDEX.
STRING_AGG ist ohne <order_clause> verfügbar. STRING_AGG ist mit einer optionalen <order_clause> verfügbar. Weitere Informationen finden Sie unter STRING_AGG

Unterschiede zwischen Kompatibilitätsgrad 90 und Kompatibilitätsgrad 100

In diesem Abschnitt werden neue mit Kompatibilitätsgrad 100 eingeführte Verhaltensweisen beschrieben.

Kompatibilitätsgradeinstellung 90 Kompatibilitätsgradeinstellung 100 Mögliche Auswirkung
Die QUOTED_IDENTIFIER Einstellung ist immer für ON mehrwertige Tabellenwertfunktionen festgelegt, wenn sie unabhängig von der Einstellung auf Sitzungsebene erstellt werden. Die QUOTED IDENTIFIER-Sitzungseinstellung wird berücksichtigt, wenn Tabellenwertfunktionen mit mehreren Anweisungen erstellt werden. Medium
Wenn Sie eine Partitionsfunktion erstellen oder ändern, werden datums- und smalldatetime-Literale in der Funktion ausgewertet, vorausgesetzt, US_English als Spracheinstellung. Die aktuelle Spracheinstellung wird verwendet, um datums- und smalldatetime-Literale in der Partitionsfunktion auszuwerten. Medium
Die FOR BROWSE-Klausel ist in INSERT- und SELECT INTO-Anweisungen zulässig (und wird ignoriert). Die FOR BROWSE-Klausel ist in INSERT- und SELECT INTO-Anweisungen nicht zulässig. Medium
Volltextprädikate sind in der OUTPUT-Klausel zulässig. Volltextprädikate sind in der OUTPUT-Klausel nicht zulässig. Low
CREATE FULLTEXT STOPLIST, ALTER FULLTEXT STOPLIST und DROP FULLTEXT STOPLIST werden nicht unterstützt. Die Systemstoppliste wird automatisch neuen Volltextindizes zugeordnet. CREATE FULLTEXT STOPLIST, ALTER FULLTEXT STOPLIST und DROP FULLTEXT STOPLIST werden unterstützt. Low
MERGE wird nicht als reserviertes Schlüsselwort erzwungen. MERGE ist ein vollständig reserviertes Schlüsselwort. Die MERGE-Anweisung wird bei den Kompatibilitätsgraden 100 und 90 unterstützt. Low
Die Verwendung des <dml_table_source> Arguments der INSERT Anweisung löst einen Syntaxfehler aus. Sie können die Ergebnisse einer Klausel in einer OUTPUT geschachtelten INSERT, UPDATE, , DELETEoder MERGE Anweisung erfassen und diese Ergebnisse in eine Zieltabelle oder -ansicht einfügen. Dazu wird das <dml_table_source> Argument der INSERT Anweisung verwendet. Low
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. Räumliche Indizes werden nicht unterstützt. 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. Allerdings werden für XML-Indizes, räumliche Indizes und indizierte Sichten standardmäßig nur physische Konsistenzprüfungen ausgeführt.

Bei Angabe von WITH EXTENDED_LOGICAL_CHECKS werden logische Konsistenzprüfungen an indizierten Ansichten, XML-Indizes und räumlichen Indizes (sofern vorhanden) ausgeführt. Standardmäßig werden physische Konsistenzprüfungen vor den logischen Konsistenzprüfungen ausgeführt. Wenn NOINDEX ebenfalls angegeben ist, werden nur die logischen Prüfungen ausgeführt.
Low
Wenn eine OUTPUT Klausel mit einer DML-Anweisung (Data Manipulation Language) verwendet wird und während der Ausführung einer Anweisung ein Laufzeitfehler auftritt, wird die gesamte Transaktion beendet und zurückgesetzt. 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. Wenn SET XACT_ABORT dies der Grund ist OFF, wird ein von der DML-Anweisung mit der OUTPUT KLAUSEL generierter Anweisung abgebrochener Fehler beendet, die Ausführung des Batches wird jedoch fortgesetzt, und die Transaktion wird nicht zurückgesetzt. Wenn SET XACT_ABORT ja ON, werden alle Laufzeitfehler, die von der DML-Anweisung mithilfe der OUTPUT Klausel generiert werden, den Batch beendet, und die Transaktion wird zurückgesetzt. Low
CUBE und ROLLUP werden nicht als reservierte Schlüsselwörter erzwungen. CUBE und ROLLUP sind reservierte Schlüsselwörter innerhalb der GROUP BY Klausel. Low
Strenge Überprüfung wird auf Elemente des XML-Typs anyType angewendet. Die Lax-Überprüfung wird auf Elemente des anyType-Typs angewendet. Weitere Informationen finden Sie unter "Komponenten für Wildcards" und "Inhaltsüberprüfung". Low
Die speziellen Attribute "xsi:nil " und "xsi:type " können nicht von Datenmanipulationssprachenanweisungen abgefragt oder geändert werden.

Dies bedeutet, dass /e/@xsi:nil fehlert, während /e/@* die Attribute "xsi:nil " und "xsi:type " ignoriert werden. /e Gibt jedoch die Attribute "xsi:nil" und "xsi:type" für die Konsistenz mit SELECT xmlCol, auch wenn 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.

Beispielsweise gibt das Ausführen der Abfrage SELECT x.query('a/b/@*') alle Attribute einschließlich xsi:nil und xsi:type zurück. Wenn Sie diese Typen in der Abfrage ausschließen möchten, ersetzen Sie @* den @*[namespace-uri(.) != "xsi-Namespace-URI" und nicht (local-name(.) = "type" oder local-name(.) ="nil".
Low
Eine benutzerdefinierte Funktion, die einen XML-Konstantenzeichenfolgenwert in einen SQL Server-Datetime-Typ konvertiert, wird als deterministisch markiert. Eine benutzerdefinierte Funktion, die einen XML-Konstantenzeichenfolgenwert in einen SQL Server-Datetime-Typ konvertiert, ist als nicht deterministisch gekennzeichnet. Low
Die XML-Datentypen „union“ und „list“ werden nicht vollständig unterstützt. Die XML-Datentypen "union" und "list" werden vollständig unterstützt, einschließlich der folgenden Funktionalität:

"union" von "list"

"union" von "union"

Liste der atomaren Typen

"list" von "union"
Low
Die SET für eine xQuery-Methode erforderlichen Optionen werden nicht überprüft, wenn die Methode in einer Ansicht oder inlinetabellenwertigen Funktion enthalten ist. Die SET für eine xQuery-Methode erforderlichen Optionen werden überprüft, wenn die Methode in einer Ansicht oder inlinetabellenwert-Funktion enthalten ist. Ein Fehler wird ausgelöst, wenn die SET Optionen der Methode falsch festgelegt wurden. Low
XML-Attributwerte, die Zeilenendezeichen enthalten (Wagenrücklauf und Zeilenvorschub) werden gemäß dem XML-Standard nicht normalisiert. Somit werden anstelle eines einzelnen Zeilenvorschubzeichens beide Zeichen zurückgegeben. XML-Attributwerte, die Zeilenendezeichen enthalten (Wagenrücklauf und Zeilenvorschub) werden gemäß dem XML-Standard normalisiert. 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, auf die nicht #xA folgt, in das einzelne Zeichen #xA übersetzt werden.

Anwendungen, die mithilfe von Attributen Zeichenfolgenwerte transportieren, die Zeilenendezeichen enthalten, erhalten diese Zeichen nicht wie gesendet zurück. Um die Normalisierung zu verhindern, müssen für die Codierung aller Zeilenendezeichen numerische XML-Zeichenentitäten verwendet werden.
Low
Die Spalteneigenschaften ROWGUIDCOL und IDENTITY können als Einschränkung falsch benannt werden. 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. Die Spalteneigenschaften ROWGUIDCOL und IDENTITY können nicht als Einschränkung benannt werden. Der Fehler 156 wird zurückgegeben. Low
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. Dies kann dazu führen, dass sich die Bedeutungen der Prädikate für jede Zeile einzeln unvorhersehbar ändern.

Dieses Verhalten gilt nur, wenn der Kompatibilitätsgrad auf 90 festgelegt ist.
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. Low
Variable Zuordnung ist in einer Anweisung zulässig, die einen Operator auf oberster Ebene UNION enthält, aber unerwartete Ergebnisse zurückgibt. Weitere Informationen finden Sie im Beispiel E. Variable Zuordnung ist in einer Anweisung, die einen Operator auf oberster Ebene UNION enthält, nicht zulässig. Der Fehler 10734 wird zurückgegeben. Suchen Eines vorgeschlagenen Umschreibens in Beispiel E. Low
Die ODBC-Funktion <legacyBold>{fn CONVERT ()}</legacyBold> verwendet das Standarddatumsformat der Sprache. 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()}. Die ODBC-Funktion {fn CONVERT()} verwendet Format 121 (ein sprachunabhängiges YMD-Format) beim Konvertieren in die ODBC-Datentypen SQL_TIMESTAMP, , , SQL_DATESQLDATE SQL_TIMEund SQL_TYPE_TIMESQL_TYPE_TIMESTAMP. Low
Systeminterne Datetime-Werte, z DATEPART . B. keine Zeichenfolgeneingabewerte, müssen gültige Datetime-Literale sein. SELECT DATEPART (year, '2007/05-30') wird beispielsweise erfolgreich kompiliert. Für systeminterne datetime-Funktionen wie z.B. DATEPART ist es erforderlich, dass Zeichenfolgeneingabewerte gültige datetime-Literale sind. Fehler 241 wird zurückgegeben, wenn ein ungültiges datetime-Literal verwendet wird. Low
Nachfolgende Leerzeichen, die im ersten Eingabeparameter für die REPLACE Funktion angegeben sind, werden gekürzt, wenn der Parameter vom Typ Char ist. In der Anweisung SELECT '<' + REPLACE(CONVERT(char(6), 'ABC '), ' ', 'L') + '>'wird der Wert 'ABC ' beispielsweise fälschlicherweise als 'ABC'. Nachstehende Leerzeichen werden immer beibehalten. Verwenden Sie bei Anwendungen, die auf dem vorherigen Verhalten der Funktion basieren, die RTRIM Funktion, wenn Sie den ersten Eingabeparameter für die Funktion angeben. Die folgende Syntax reproduzieren beispielsweise das SQL Server 2005-Verhalten: SELECT '<' + REPLACE(RTRIM(CONVERT(char(6), 'ABC ')), ' ', 'L') + '>'. Low

Reservierte Schlüsselwörter

Die Kompatibilitätseinstellung bestimmt außerdem die für das Datenbank-Engine reservierten Schlüsselwörter. In der folgenden Tabelle sind die reservierten Schlüsselwörter aufgeführt, die mit den einzelnen Kompatibilitätsgraden eingeführt werden.

Kompatibilitätsgradeinstellung Reservierte Schlüsselwörter
130 Bestimmung erforderlich.
120 None.
110 WITHIN GROUP, , TRY_CONVERTSEMANTICKEYPHRASETABLE, , SEMANTICSIMILARITYDETAILSTABLESEMANTICSIMILARITYTABLE
100 CUBE, MERGEROLLUP
90 EXTERNAL, , PIVOTUNPIVOT, , REVERTTABLESAMPLE

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

Nach der Einführung bleibt ein Schlüsselwort reserviert. 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.

Wenn eine Anwendung einen Bezeichner verwendet, der für den Kompatibilitätsgrad der Anwendung als Schlüsselwort reserviert ist, erzeugt die Anwendung einen Fehler. Um dies zu umgehen, schließen Sie den Bezeichner zwischen Klammern ([]) oder Anführungszeichen ("") ein; Um beispielsweise eine Anwendung zu aktualisieren, die den Bezeichner EXTERNAL auf Kompatibilitätsebene 90 verwendet, können Sie den Bezeichner [EXTERNAL] entweder in oder "EXTERNAL".

Weitere Informationen finden Sie unter "Reservierte Schlüsselwörter".

Permissions

Erfordert die ALTER-Berechtigung für die Datenbank.

Examples

A. Ändern des Kompatibilitätsgrads

Im folgenden Beispiel wird die Kompatibilitätsebene der AdventureWorks2022Beispieldatenbank auf 150 geändert, die Standardeinstellung für SQL Server 2019 (15.x).

ALTER DATABASE AdventureWorks2022
    SET COMPATIBILITY_LEVEL = 150;
GO

Im folgenden Beispiel wird der Kompatibilitätsgrad der aktuellen Datenbank zurückgegeben.

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

B. Ignorieren der SET LANGUAGE-Anweisung außer bei einem Kompatibilitätsgrad von mindestens 120

Die folgende Abfrage ignoriert die SET LANGUAGE-Anweisung außer bei einem Kompatibilitätsgrad von mindestens 120.

SET DATEFORMAT dmy;

DECLARE @t2 AS DATE = '12/5/2011';

SET LANGUAGE dutch;

SELECT CONVERT (VARCHAR (11), @t2, 106);
GO

Ergebnisse, wenn der Kompatibilitätsgrad kleiner als 120 ist: 12 May 2011

Ergebnisse, wenn der Kompatibilitätsgrad auf 120 oder höher festgelegt ist: 12 mei 2011

C. Rekursive Verweise auf der rechten Seite einer EXCEPT-Klausel erzeugen bei der Kompatibilitätsgradeinstellung von 110 oder niedriger eine Endlosschleife.

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

D. Der Unterschied zwischen den Formaten 0 und 121

Wenn die Kompatibilitätsebene niedriger als 110 ist, beträgt die Standardformatvorlage für CAST Und CONVERT Vorgänge für Zeit - und Datetime2-Datentypen 121, außer wenn beide Typen in einem berechneten Spaltenausdruck verwendet werden. Für berechnete Spalten ist das Standardformat 0.

Wenn die Kompatibilitätsebene 110 oder höher ist, ist der Standardstil für CAST und CONVERT Vorgänge für Zeit- und Datetime2-Datentypen immer 121. Weitere Informationen finden Sie unter Unterschiede zwischen niedrigeren Kompatibilitätsgraden und den Kompatibilitätsgraden 100 und 110.

Weitere Informationen zu Datums- und Zeitformaten finden Sie unter CAST und CONVERT.

DROP TABLE IF EXISTS t1;
GO

CREATE TABLE t1
(
    c1 TIME (7),
    c2 DATETIME2
);
GO

INSERT t1 (c1, c2)
VALUES (GETDATE(), GETDATE());
GO

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;
GO

Dadurch werden Ergebnisse wie die folgenden zurückgegeben:

TimeStyle0 TimeStyle121 Datetime2Style0 Datetime2Style121
3:15PM 15:15:35.8100000 7. Juni 2011, 15:15 Uhr 2011-06-07 15:15:35.8130000

E. Variablenzuweisung – UNION-Operator auf der obersten Ebene

Unter der Einstellung der Datenbankkompatibilitätsebene von 90 ist die Variablezuweisung in einer Anweisung zulässig, die einen Operator auf oberster Ebene UNION enthält, aber unerwartete Ergebnisse zurückgibt. Beispielsweise wird in den folgenden Anweisungen der lokalen Variable @v der Wert der Spalte BusinessEntityID aus der Vereinigung von zwei Tabellen zugewiesen. Wenn die Anweisung mehr als einen Wert zurückgibt, wird die SELECT Variable standardmäßig dem letzten zurückgegebenen Wert zugewiesen. In diesem Fall wird die Variable dem letzten Wert richtig zugewiesen, aber auch der Resultset der SELECT UNION Anweisung wird zurückgegeben.

ALTER DATABASE AdventureWorks2022
    SET COMPATIBILITY_LEVEL = 110;
GO

USE AdventureWorks2022;
GO

DECLARE @v AS INT;

SELECT @v = BusinessEntityID
FROM HumanResources.Employee
UNION ALL
SELECT @v = BusinessEntityID
FROM HumanResources.EmployeeAddress;

SELECT @v;

Unter der Einstellung der Datenbankkompatibilitätsebene von 100 und höher ist die Variablenzuweisung in einer Anweisung, die einen Operator der obersten Ebene UNION enthält, nicht zulässig. Der Fehler 10734 wird zurückgegeben.

Um den Fehler zu beheben, müssen Sie die Abfrage umschreiben, wie im folgenden Beispiel gezeigt.

DECLARE @v AS INT;

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

SELECT @v;