Datenbanken können unter MS-SQL unterschiedliche Kompatibiliätslevel haben. Dieser Level gibt an, mit welcher SQL-Version die entsprechende Datenbank kompatibel ist. Unterschiede der Level treten zum Beispiel bei der „ORDER BY“-Abfrage auf. Per Transact-SQL können Sie mit sp_dbcmptlevel () einer Datenbank einen Level zuweisen.
[ @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
Beispiel
Wir möchten der Datenbank Mitglieder den Kompatibilitätsgrad der auf „80“ ändern:
EXEC sp_dbcmptlevel Mitglieder, 80;
GO
Abfragen des Kompatibilitätslevels:
Im Fehlerfalle bei der Portierung von Datenbanken auf ein anderes Zielsystem kann der Kompatibilitätslevel eine Fehlerquelle darstellen. So fragen Sie alle Datenbaken auf einem SQL-Server ab und stellen den Level fest:
use master
go
DECLARE name_cursor CURSOR FOR
SELECT name, cmptlevel FROM sysdatabases
DECLARE @dbname sysname
DECLARE @compver tinyint
OPEN name_cursor
FETCH NEXT FROM name_cursor INTO @dbname, @compver
WHILE @@FETCH_STATUS = 0
BEGIN
IF @compver < 80
BEGIN
select @dbname, @compver
–EXEC sp_dbcmptlevel @dbname, 80
END
FETCH NEXT FROM name_cursor INTO @dbname, @compver
END
CLOSE name_cursor
DEALLOCATE name_cursor
select * from sysdatabases
Automatisches setzen des Kompatibilätslevels, wenn dieser unter 80 ist.
use master
go
DECLARE name_cursor CURSOR FOR
SELECT name, cmptlevel FROM sysdatabases
DECLARE @dbname sysname
DECLARE @compver tinyint
sysdatabases
OPEN name_cursor
FETCH NEXT FROM name_cursor INTO @dbname, @compver
WHILE @@FETCH_STATUS = 0
BEGIN
IF @compver < 80
BEGIN
EXEC sp_dbcmptlevel @dbname, 80
END
FETCH NEXT FROM name_cursor INTO @dbname, @compver
END
CLOSE name_cursor
DEALLOCATE name_cursor
select * from sysdatabases