SQL 2005: Kompatibilitätslevel abfragen und setzen

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

Schreibe einen Kommentar