2016-06-23 4 views
1

Wenn ich versuche, die Kompatibilitätsstufe für SQL Server in einem Skript festzulegen, wird für SQL Server 2008 eine Fehlermeldung ausgegeben. Ich möchte, dass dieses Skript für alle Server ausgeführt wird. 2008, 2012 oder 2014, die wir derzeit unterstützen.Festlegen der SQL Server-Kompatibilitätsstufe basierend auf dem Server im Skript

-- Set database compatibility -- 
IF SUBSTRING(CAST(SERVERPROPERTY('ProductVersion') AS VARCHAR),1 ,2) >= 11 
BEGIN 
    RAISERROR ('sql server 12 and above', 10, 1) 

    ALTER DATABASE JJAI_TESTDB SET COMPATIBILITY_LEVEL = 110 
END 
ELSE 
BEGIN 
    RAISERROR ('sql server 2008',10, 1) 

    ALTER DATABASE JJAI_TESTDB SET COMPATIBILITY_LEVEL = 100 
END 
GO 

Unterhalb der Fehler ist:

Msg 15048, Level 16, State 1, Line 5 
Valid values of the database compatibility level are 80, 90, or 100. 
+2

Was ist der Fehler? –

+0

Es sieht so aus, als ob der Fehler in der ersten alter-Anweisung auftritt. Welche Produktversion erhalten Sie, wenn Sie mit den if-Kriterien drucken? – SMM

+0

Meine Produktversion ist 2008. Das Skript wird also nicht ausgeführt, aber die Kompilierung selbst oder die Vorverarbeitung schlägt fehl. –

Antwort

0

Okay, ich war in der Lage, es zu tun, indem sie wie unter der alten Anweisung innerhalb einer Ausführungsanweisung auszuführen.

/* Set database compatibility */ 
IF SUBSTRING(CAST(SERVERPROPERTY('ProductVersion') AS VARCHAR),1 ,2) >= 11 
    EXECUTE ('ALTER DATABASE $(DATABASENAME) SET COMPATIBILITY_LEVEL = 110') 
ELSE 
    EXECUTE ('ALTER DATABASE $(DATABASENAME) SET COMPATIBILITY_LEVEL = 100') 
GO