Um automatisch entscheiden zu können welchen Service-Pack (SP) oder Cummulative-Update-Package (CU) man einspielen muss, muss man wissen, ob der SQL-Server ein deutscher oder englischer ist. Früher hatten wir es schon einfacher, weil wir da immer nur mit englischen SQL-Servern zu tun hatten, damals noch von Sybase. Seit dem Umstieg auf Microsoft setzen wir immer den korrekten, landessprachlichen SQL-Server ein: auf deutschem Windows ist ein deutscher SQL-Server und auf einem englischen ein englischer.

Das haben wir der Auskunft des Microsoft-Supports zu verdanken, dass sie immer nur die landessprachlichen Versionen des SQL-Servers auf den entsprechenden Windows-Systemen testen, aber keine Mixe, wie z.B. den englischen SQL-Server auf einem deutschen Windows. Und nur diese Kombinationen werden von ihnen supportet. Aber ich will nicht lamentieren, so ist es einfach. Wir testen schließlich auch nicht jede denkbare Kombination unserer Software mit verschiedenen Sprachversionen von Windows.

Um herauszubekommen, was für einen SQL-Server man vor sich hat, kann man die XP xp_msver verwenden. Sie gibt einem neben der Sprache (im Datensatz "Language") und Produktversion und sogar Product Key, auch Infos zum Windows-System aus (z.B. Hauptspeicher, Version, Anzahl Prozessoren). Um nur einen einzigen dieser Werte in eine Variable zu bekommen, die man dann auswerten kann, muss man das Result-Set in eine Tabellenvariable schreiben und dann gezielt auslesen, z.B. so:

DECLARE @MSVer TABLE (ID int, Name sysname, Internal_Value int, Value nvarchar(512));
INSERT @MSVer (ID, Name, Internal_Value, Value)
EXEC master.dbo.xp_msver N'Language';

SELECT Value AS [Language]
FROM @MSVer
WHERE Name = N'Language';

Lässt man die Optionsangabe hinter xp_msver weg, dann werden alle Optionen mit Wert ausgegeben.

PS: Habe ich schon erwähnt, dass diese XP jeder ausführen darf? Die Gruppe "public" hat Ausführungsrechte. Man könnte sich überlegen diese Rechte nicht jedem geben zu wollen… 😉