sp_dbcmptlevel (Transact-SQL)
Legt für bestimmte Verhalten der Datenbank fest, dass sie mit der angegebenen Version von SQL Server kompatibel sein müssen.
Wichtig |
---|
Diese Funktion wird in zukünftigen Versionen von Microsoft SQL Server nicht mehr bereitgestellt. Verwenden Sie diese Funktion beim Entwickeln neuer Anwendungen nicht, und planen Sie so bald wie möglich das Ändern von Anwendungen, in denen es zurzeit verwendet wird. Verwenden Sie stattdessen den ALTER DATABASE-Kompatibilitätsgrad. |
Syntax
sp_dbcmptlevel [ [ @dbname = ] name ]
[ , [ @new_cmptlevel = ] version ]
Argumente
[ @dbname= ] name
Der Name der Datenbank, deren Kompatibilitätsgrad geändert werden soll. Datenbanknamen müssen den Regeln für Bezeichner entsprechen. name ist ein Wert vom Datentyp sysname; der Standardwert ist NULL.[ @new_cmptlevel= ] version
Die SQL Server-Version, mit der die Datenbank kompatibel sein soll. version ist ein Wert vom Datentyp tinyint; der Standardwert ist NULL. Folgende Werte sind zulässig:80 = SQL Server 2000
90 = SQL Server 2005
100 = SQL Server 2008
Rückgabecodewerte
0 (Erfolg) oder 1 (Fehler)
Resultsets
Wenn keine Parameter angegeben werden oder wenn der name-Parameter nicht angegeben wird, gibt sp_dbcmptlevel einen Fehler zurück.
Wenn name ohne version angegeben wird, gibt Database Engine (Datenbankmodul) eine Meldung zurück, die den aktuellen Kompatibilitätsgrad der angegebenen Datenbank anzeigt.
Hinweise
Eine Beschreibung der Kompatibilitätsgrade finden Sie unter ALTER DATABASE-Kompatibilitätsgrad (Transact-SQL).
Berechtigungen
Nur der Datenbankbesitzer, Mitglieder der festen Serverrolle sysadmin und der festen Datenbankrolle db_owner (wenn Sie die aktuelle Datenbank ändern) können diese Prozedur ausführen.
Beispiele
A. Ändern des Kompatibilitätsgrades in SQL Server 2000
Im folgenden Beispiel wird der Kompatibilitätsgrad der AdventureWorks2008R2-Datenbank in 80 geändert.
EXEC sp_dbcmptlevel AdventureWorks2008R2, 80;
GO
B. Auswirkung des Kompatibilitätsgrads auf ORDER BY (Szenario 1)
Im folgenden Beispiel wird der Unterschied bei der ORDER BY-Bindung für die Kompatibilitätsgrade 80 und 90 veranschaulicht. In dem Beispiel wird die Beispieltabelle SampleTable in der tempdb-Datenbank erstellt.
USE tempdb;
CREATE TABLE SampleTable(c1 int, c2 int);
GO
Beim Kompatibilitätsgrad 90 (Standardeinstellung) generiert die folgende SELECT... ORDER BY-Anweisung einen Fehler, da der Spaltenname in der AS-Klausel (c1) mehrdeutig ist.
SELECT c1, c2 AS c1
FROM SampleTable
ORDER BY c1;
GO
Nachdem der Kompatibilitätsgrad der Datenbank auf 80 festgelegt wurde, wird dieselbe SELECT... ORDER BY-Anweisung erfolgreich ausgeführt.
sp_dbcmptlevel tempdb, 80
SELECT c1, c2 AS c1
FROM SampleTable
ORDER BY c1;
GO
Die folgende SELECT... ORDER BY-Anweisung ist bei beiden Kompatibilitätsgraden funktionsfähig.
sp_dbcmptlevel tempdb, 80
SELECT c1, c2 AS c3
FROM SampleTable
ORDER BY c1;
GO
sp_dbcmptlevel tempdb, 90
SELECT c1, c2 AS c3
FROM SampleTable
ORDER BY c1;
GO
C. Auswirkung des Kompatibilitätsgrads auf ORDER BY (Szenario 2)
Beim Kompatibilitätsgrad 90 (Standardeinstellung) generiert die folgende SELECT...ORDER BY-Anweisung einen Fehler, da in der ORDER BY-Klausel ein weiteres Präfix angegeben ist.
SELECT c1 AS x
FROM SampleTable
ORDER BY SampleTable.x;
GO
Nachdem der Kompatibilitätsgrad der Datenbank auf 80 festgelegt wurde, wird dieselbe SELECT...ORDER BY-Anweisung erfolgreich ausgeführt.
sp_dbcmptlevel tempdb, 80
SELECT c1 AS x
FROM SampleTable
ORDER BY SampleTable.x;
GO
Die folgende SELECT...ORDER BY-Anweisung ist bei beiden Kompatibilitätsgraden funktionsfähig.
sp_dbcmptlevel tempdb, 80
SELECT c1 AS x
FROM SampleTable
ORDER BY x;
GO
sp_dbcmptlevel tempdb, 90
SELECT c1 AS x
FROM SampleTable
ORDER BY x;
GO