Manchmal ist es erforderlich, auf möglichst einfache und schnelle Weise die Versionsnummer eines MS SQL Server herauszufinden. Nun bringt der SQL Server hierfür auch eine Funktion mit: Die Systemvariable "@@version" enthält die Information. Nachteilig dabei ist aber, dass man schon einen geeigneten Client braucht, um die Daten auch abzufragen.
Variante 1
Schneller geht es mit dem folgenden VB-Script. Es öffnet eine Verbindung zum Server, fragt die ab und gibt das Ergebnis als Meldung zurück.
Das gezeigt Script kann man z. B. auch verwenden, um die Versionsinformation in das sehr nützliche Tool "BGInfo" von Sysinternals einzubinden.
Das Skript: vbsSQLSRVversion.vbs
strSQLServer = "servername" ' hier Servernamen angeben strConn = "Driver={SQL Server};SERVER=" & strSQLServer set objDB = CreateObject("ADODB.Connection") objDB.Open(strConn) strSQL = "select v=@@version" set objRS = objDB.Execute(strSQL) wscript.echo objRS.Fields("v").value
Variante 2
Als Reaktion auf den "Slammer"-Wurm Ende Januar 2003 habe ich folgende Variation des Skripts entwickelt. Es funktioniert mit SQL Server Version 7.0, 2000 und 2005. Es kann auf jedem Server bzw. Client gestartet werden, der den Windows Script Host installiert hat (ab W2000; bei NT nicht Standard).
Das Skript gibt eine Versionsinfo zu dem Server aus, dessen Namen man angibt (falls er existiert). Sollte das Skript nicht laufen, kann man direkt auf dem SQL-Server in einem CMD-Fenster folgendes Kommando eingeben:
osql -E -Q "select @@version"
Auch hier sollte eine Versionsinfo zurückkommen. Der "Slammer"-Patch ist dann vorhanden, wenn auf dem SQL-Server 2000 die Versionsnummer >= 8.00.760 ist (entspricht SP3). Auf dem SQL-Server 7.0 muss sie >= 7.00.1077 sein. Ist das nicht der Fall, dann muss gepatcht werden. Achtung: Für SQL Server 7.0 muss erst SP4, dann der Patch eingespielt werden. Die Update-Prozedur dauert ziemlich lange und erfordert mindestens einen Neustart des SQL-Dienstes, evtl. sogar des Servers.
Das Skript: vbsSQLSRVversion2.vbs
strSQLServer = "." ' hier Servernamen angeben; "." ist lokal strConn = "Driver={SQL Server};SERVER=" & strSQLServer on error resume next set objDB = CreateObject("ADODB.Connection") objDB.Open(strConn) if err.number <> 0 then quitcode else sqlvers end if sub sqlVers() strSQL = "select v=@@version" set objRS = objDB.Execute(strSQL) if err.number <> 0 then quitcode exit sub end if strVer = objRS.Fields("v").value if err.number <> 0 then quitcode exit sub end if if instr(strVer, "2005 - 9") > 0 then strSQL = "SELECT v= 'SQL Server 2005 ' + cast(SERVERPROPERTY ('productlevel')" _ & " as varchar) + ', Version ' + cast(SERVERPROPERTY('productversion')" _ & " as varchar) + ', ' + cast(SERVERPROPERTY ('edition') as varchar)" set objRS = objDB.Execute(strSQL) strVer = objRS.Fields("v").value elseif instr(strVer, "2000 - 8") > 0 then strSQL = "SELECT v= 'SQL Server 2000 ' + cast(SERVERPROPERTY ('productlevel')" _ & " as varchar) + ', Version ' + cast(SERVERPROPERTY('productversion')" _ & " as varchar) + ', ' + cast(SERVERPROPERTY ('edition') as varchar)" set objRS = objDB.Execute(strSQL) strVer = objRS.Fields("v").value elseif instr(strVer, "7.00.1063") then strVer = "SQL Server 7.0 SP4" elseif instr(strVer, "7.00.961") then strVer = "SQL Server 7.0 SP3" elseif instr(strVer, "7.00.842") then strVer = "SQL Server 7.0 SP2" elseif instr(strVer, "7.00.699") then strVer = "SQL Server 7.0 SP1" elseif instr(strVer, "7.00.623") then strVer = "SQL Server 7.0 ohne SP" end if WScript.echo strVer end sub sub quitcode() WScript.echo "(kein Wert ermittelt)" end sub
http://faq-o-matic.net/?p=636