Wie kann die bereitgestellte SQL Server-Version ermittelt werden?
Ich habe versucht, dies mit der SQL Server-Software zu tun. Ich möchte es mit einer Befehlszeilen-SQL-Anweisung tun.
Wie kann die bereitgestellte SQL Server-Version ermittelt werden?
Ich habe versucht, dies mit der SQL Server-Software zu tun. Ich möchte es mit einer Befehlszeilen-SQL-Anweisung tun.
Antworten:
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\ERRORLOG
und ERRORLOG.n
Dateien. 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
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
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 @@ERROR
als Befehlszeile zurückzugeben, ERRORLEVEL
wenn> = 16 (und die zweite Zeile geht an die :ExitFail
Bezeichnung, wenn die vorgenannt ERRORLEVEL
ist> = 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, ProductVersion
gibt 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 PARSENAME
Funktion 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 NULL
fü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 ProductLevel
und 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:
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)
Einfach benutzen
SELECT @@VERSION
Beispielausgabe
Microsoft SQL Server 2012 - 11.0.2100.60 (X64)
Feb 10 2012 19:39:15
Copyright (c) Microsoft Corporation
Express Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )
Quelle: Wie überprüfe ich die SQL Server-Version? (Verschiedene Möglichkeiten erklärt)