So überprüfen Sie die SQL Server-Version

Antworten:

227

Es gibt folgende Möglichkeiten, die Version anzuzeigen:

Methode 1: Stellen Sie eine Verbindung zur Instanz von SQL Server her und führen Sie die folgende Abfrage aus:

Select @@version

Ein Beispiel für die Ausgabe dieser Abfrage lautet wie folgt:

Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (X64)   Mar 29 2009 
10:11:52   Copyright (c) 1988-2008 Microsoft Corporation  Express 
Edition (64-bit) on Windows NT 6.1 <X64> (Build 7600: )

Methode 2: Stellen Sie mithilfe des Objekt-Explorers in SQL Server Management Studio eine Verbindung zum Server her. Nachdem der Objekt-Explorer verbunden wurde, werden die Versionsinformationen in Klammern zusammen mit dem Benutzernamen angezeigt, der zum Herstellen einer Verbindung mit der bestimmten Instanz von SQL Server verwendet wird.

Methode 3: Sehen Sie sich die ersten Zeilen der Fehlerprotokolldatei für diese Instanz an. Standardmäßig befindet sich das Fehlerprotokoll unter Programme \ Microsoft SQL Server\MSSQL.n\MSSQL\LOG\ERRORLOGund ERRORLOG.nDateien. Die Einträge können wie folgt aussehen:

2011-03-27 22:31:33.50 Server      Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (X64)                 Mar 29 2009 10:11:52                 Copyright (c) 1988-2008 Microsoft Corporation                Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7600: )

Wie Sie sehen können, enthält dieser Eintrag alle erforderlichen Informationen zum Produkt, z. B. Version, Produktebene, 64-Bit- oder 32-Bit-Version, die Edition von SQL Server und die Betriebssystemversion, auf der SQL Server ausgeführt wird.

Methode 4: Stellen Sie eine Verbindung zur Instanz von SQL Server her und führen Sie die folgende Abfrage aus:

SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')

Hinweis Diese Abfrage funktioniert mit jeder Instanz von SQL Server 2000 oder einer späteren Version

Imran
quelle
6
Ich habe festgestellt, dass Methode 4 zuverlässiger ist als Methode 1 - Ich hatte Server, auf denen kein Service Pack korrekt installiert wurde, wobei Methode 1 und Methode 4 unterschiedliche Ergebnisse lieferten, Methode 4 jedoch korrekt war.
Kaganar
8
declare @sqlVers numeric(4,2)
select @sqlVers = left(cast(serverproperty('productversion') as varchar), 4)

Gibt 8.00, 9.00, 10.00 und 10.50 für SQL 2000, 2005, 2008 und 2008R2.

Versuchen Sie auch das erweiterte Systemverfahren xp_msver. Sie können diese gespeicherte Prozedur wie folgt aufrufen

exec master..xp_msver
Linga
quelle
2

TL; DR

SQLCMD -S (LOCAL) -E -V 16 -Q "IF(ISNULL(CAST(SERVERPROPERTY('ProductMajorVersion') AS INT),0)<11) RAISERROR('You need SQL 2012 or later!',16,1)"
IF ERRORLEVEL 1 GOTO :ExitFail

Dies verwendet SQLCMD (im Lieferumfang von SQL Server enthalten), um mithilfe der Windows- Authentifizierung eine Verbindung zur lokalen Serverinstanz herzustellen, einen Fehler auszulösen, wenn eine Versionsprüfung fehlschlägt, und die @@ERRORals Befehlszeile zurückzugeben, ERRORLEVELwenn> = 16 (und die zweite Zeile geht an die :ExitFailBezeichnung, wenn die vorgenannt ERRORLEVEList> = 1).

Watchas, Gotchas & More Info

Für SQL 2000+ können Sie die SERVERPROPERTY verwenden , um viele dieser Informationen zu ermitteln.

Während SQL 2008+ die ProductMajorVersion& ProductMinorVersion-Eigenschaften unterstützt, ProductVersiongibt es sie seit 2000 (wenn eine Eigenschaft nicht unterstützt wird, wird die Funktion zurückgegeben NULL).

Wenn Sie an früheren Versionen interessiert sind, können Sie die PARSENAMEFunktion verwenden, um die zu teilen ProductVersion(wobei Sie sich daran erinnern, dass die "Teile" von rechts nach links nummeriert sind, dh PARSENAME('a.b.c', 1)zurückgegeben werden c).

Denken Sie auch daran, dass dies PARSENAME('a.b.c', 4)zurückkehrt NULL, da SQL 2005 und früher nur 3 Teile in der Versionsnummer verwendet hat!

Für SQL 2008+ können Sie also einfach Folgendes verwenden:

SELECT
    SERVERPROPERTY('ProductVersion') AS ProductVersion,
    CAST(SERVERPROPERTY('ProductMajorVersion')  AS INT) AS ProductMajorVersion,
    CAST(SERVERPROPERTY ('ProductMinorVersion') AS INT) AS ProductMinorVersion;

Für SQL 2000-2005 können Sie Folgendes verwenden:

SELECT
    SERVERPROPERTY('ProductVersion') AS ProductVersion,
    CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 3 ELSE 4 END) AS INT) AS ProductVersion_Major,
    CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 2 ELSE 3 END) AS INT) AS ProductVersion_Minor,
    CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 1 ELSE 2 END) AS INT) AS ProductVersion_Revision,
    CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 0 ELSE 1 END) AS INT) AS ProductVersion_Build;

(Das PARSENAME(...,0)ist ein Hack zur Verbesserung der Lesbarkeit)

Eine Überprüfung für eine SQL 2000+ -Version wäre also:

IF (CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 3 ELSE 4 END) AS INT) < 10) -- SQL2008
OR (
    (CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 3 ELSE 4 END) AS INT) = 10) -- SQL2008
AND (CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 2 ELSE 1 END) AS INT) < 5)  -- R2 (this may need to be 50)
   )
    RAISERROR('You need SQL 2008R2 or later!', 16, 1);

Das ist viel einfacher , wenn Sie nur nur in SQL interessiert 2008+ weil SERVERPROPERTY('ProductMajorVersion')Renditen NULLfür frühere Versionen, so können Sie verwenden:

IF (ISNULL(CAST(SERVERPROPERTY('ProductMajorVersion') AS INT), 0) < 11) -- SQL2012
    RAISERROR('You need SQL 2012 or later!', 16, 1);

Sie können die Eigenschaften ProductLevelund Edition(oder EngineEdition) verwenden, um RTM / SP n / CTP n bzw. Dev / Std / Ent / etc zu bestimmen .

SELECT
    CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME) AS ProductVersion,
    CAST(SERVERPROPERTY('ProductLevel') AS SYSNAME)   AS ProductLevel,
    CAST(SERVERPROPERTY('Edition') AS SYSNAME)        AS Edition,
    CAST(SERVERPROPERTY('EngineEdition') AS INT)      AS EngineEdition;

Zu Ihrer Information: Die wichtigsten SQL-Versionsnummern sind:

  • 8 = SQL 2000
  • 9 = SQL 2005
  • 10 = SQL 2008 (und 10.5 = SQL 2008R2)
  • 11 = SQL 2012
  • 12 = SQL 2014
  • 13 = SQL 2016
  • 14 = SQL 2017

Und das alles funktioniert auch für SQL Azure!

BEARBEITET: Möglicherweise möchten Sie auch Ihre DB-Kompatibilitätsstufe überprüfen, da diese möglicherweise auf eine niedrigere Kompatibilität eingestellt ist.

IF EXISTS (SELECT * FROM sys.databases WHERE database_id=DB_ID() AND [compatibility_level] < 110)
    RAISERROR('Database compatibility level must be SQL2008R2 or later (110)!', 16, 1)
AndrewD
quelle
1

Hier ist, was ich getan habe, um die Version zu finden Folgendes habe ich getan, um die Version zu finden: Schreiben SELECT @@versionSie einfach und Sie erhalten die Version.

Imad Ullah
quelle
0
select charindex(  'Express',@@version)

Wenn dieser Wert 0 ist, handelt es sich nicht um eine Expressausgabe

R. Alonso
quelle