von postNils Kaczenski post17. Oktober 2003, 14:47 Uhr post http://faq-o-matic.net/?p=636
post Kategorie: SQL Server, Scripting

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

  1. strSQLServer = "." ' hier Servernamen angeben; "." ist lokal
  2. strConn      = "Driver={SQL Server};SERVER=" & strSQLServer
  3.  
  4. on error resume next
  5. set objDB = CreateObject("ADODB.Connection")
  6. objDB.Open(strConn)
  7.  
  8. if err.number <> 0 then
  9.     quitcode
  10. else
  11.     sqlvers
  12. end if
  13.  
  14. sub sqlVers()
  15.     strSQL = "select v=@@version"
  16.     set objRS = objDB.Execute(strSQL)
  17.  
  18.     if err.number <> 0 then
  19.         quitcode
  20.         exit sub
  21.     end if
  22.  
  23.     strVer = objRS.Fields("v").value
  24.  
  25.     if err.number <> 0 then
  26.         quitcode
  27.         exit sub
  28.     end if
  29.  
  30.  
  31.     if instr(strVer, "2005 - 9") > 0 then
  32.        strSQL = "SELECT v= 'SQL Server 2005 ' + cast(SERVERPROPERTY ('productlevel')" _
  33.                   & " as varchar) + ', Version ' + cast(SERVERPROPERTY('productversion')" _
  34.                   & "  as varchar) + ', ' + cast(SERVERPROPERTY ('edition') as varchar)"
  35.        set objRS = objDB.Execute(strSQL)
  36.        strVer = objRS.Fields("v").value
  37.     elseif instr(strVer, "2000 - 8") > 0 then
  38.        strSQL = "SELECT v= 'SQL Server 2000 ' + cast(SERVERPROPERTY ('productlevel')" _
  39.                   & "  as varchar) + ', Version ' + cast(SERVERPROPERTY('productversion')" _
  40.                   & "  as varchar) + ', ' + cast(SERVERPROPERTY ('edition') as varchar)"
  41.        set objRS = objDB.Execute(strSQL)
  42.        strVer = objRS.Fields("v").value
  43.     elseif instr(strVer, "7.00.1063") then strVer = "SQL Server 7.0 SP4"
  44.     elseif instr(strVer, "7.00.961") then strVer = "SQL Server 7.0 SP3"
  45.     elseif instr(strVer, "7.00.842") then strVer = "SQL Server 7.0 SP2"
  46.     elseif instr(strVer, "7.00.699") then strVer = "SQL Server 7.0 SP1"
  47.     elseif instr(strVer, "7.00.623") then strVer = "SQL Server 7.0 ohne SP"
  48.  
  49.     end if
  50.  
  51.     WScript.echo strVer
  52.  
  53. end sub
  54.  
  55. sub quitcode()
  56.     WScript.echo "(kein Wert ermittelt)"
  57. end sub

Verwandte Beiträge:

  1. BGInfo um eigene Datenfelder erweitern
    BGInfo von Sysinternals ist für viele Windows-Admins ein unverzichtbares Werkzeug. Es blendet Konfigurationsinformationen über den lokalen Rechner in das Hintergrundbild...
  2. Tipps und Tricks zum Backup eines SQL Server
    Tägliches Backup: Backup-Datei Tägliches Backup: Backup-Medium Tägliches Backup: Automatisierung Tägliches Backup Backupdatei Oft will man sämtliche Backups eines Tages übersichtlich...
  3. Tägliche SQL-Backup-Dateien
    Oft will man sämtliche Backups eines Tages übersichtlich zusammenfassen. Das ist insbesondere dann interessant, wenn man die eingebaute Backup-Funktion des...
  4. Dienst- und Task-Konten identifizieren
    Es ist keine schlechte Idee, die Kennwörter von Dienst- und Taskausführungskonten zu ändern. Vielfach sind diese nämlich mit einem, naja,...
  5. Systeme mit Windows Server 2003 R2 identifizieren
    Es ist nicht ganz leicht, im Rahmen einer Dokumentation im Netzwerk die Server zu identifizieren, die mit Windows Server 2003...