Quali sono i modi possibili per determinare la versione di SQL Server distribuita?
Ho provato a farlo utilizzando il software SQL Server. Voglio farlo usando un'istruzione SQL da riga di comando.
Quali sono i modi possibili per determinare la versione di SQL Server distribuita?
Ho provato a farlo utilizzando il software SQL Server. Voglio farlo usando un'istruzione SQL da riga di comando.
Risposte:
Di seguito sono riportati i modi possibili per visualizzare la versione:
Metodo 1: connettersi all'istanza di SQL Server e quindi eseguire la query seguente:
Select @@version
Un esempio dell'output di questa query è il seguente:
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: )
Metodo 2: connettersi al server utilizzando Esplora oggetti in SQL Server Management Studio. Dopo aver collegato Object Explorer, mostrerà le informazioni sulla versione tra parentesi, insieme al nome utente utilizzato per connettersi all'istanza specifica di SQL Server.
Metodo 3: esaminare le prime righe del file Errorlog per tale istanza. Per impostazione predefinita, il registro degli errori si trova in Programmi \ Microsoft SQL Server\MSSQL.n\MSSQL\LOG\ERRORLOGe ERRORLOG.nfile. Le voci possono assomigliare a quanto segue:
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: )
Come puoi vedere, questa voce fornisce tutte le informazioni necessarie sul prodotto, come versione, livello del prodotto, 64 bit contro 32 bit, l'edizione di SQL Server e la versione del sistema operativo su cui è in esecuzione SQL Server.
Metodo 4: connettersi all'istanza di SQL Server e quindi eseguire la query seguente:
SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')
Nota Questa query funziona con qualsiasi istanza di SQL Server 2000 o di una versione successiva
declare @sqlVers numeric(4,2)
select @sqlVers = left(cast(serverproperty('productversion') as varchar), 4)
Fornisce rispettivamente 8,00, 9,00, 10,00 e 10,50 per SQL 2000, 2005, 2008 e 2008R2.
Inoltre, provare la procedura estesa di sistema xp_msver. È possibile chiamare questa procedura memorizzata come
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
Questo utilizza SQLCMD (fornito con SQL Server) per connettersi all'istanza del server locale tramite Windows auth, generare un errore se un controllo della versione fallisce e restituire @@ERRORcome riga di comando ERRORLEVELse> = 16 (e la seconda riga va :ExitFailall'etichetta se il sopracitato ERRORLEVELè> = 1).
Watchas, Gotchas e altre informazioni
Per SQL 2000+ è possibile utilizzare SERVERPROPERTY per determinare molte di queste informazioni.
Mentre SQL 2008+ supporta le proprietà ProductMajorVersion& ProductMinorVersion, ProductVersionesiste dal 2000 (ricordando che se una proprietà non è supportata la funzione ritorna NULL).
Se sei interessato a versioni precedenti puoi usare la PARSENAMEfunzione per dividere ProductVersion(ricordando che le "parti" sono numerate da destra a sinistra, cioè i PARSENAME('a.b.c', 1)ritorni c).
Ricorda anche che PARSENAME('a.b.c', 4)ritorna NULL, perché SQL 2005 e precedenti utilizzavano solo 3 parti nel numero di versione!
Quindi per SQL 2008+ puoi semplicemente usare:
SELECT
SERVERPROPERTY('ProductVersion') AS ProductVersion,
CAST(SERVERPROPERTY('ProductMajorVersion') AS INT) AS ProductMajorVersion,
CAST(SERVERPROPERTY ('ProductMinorVersion') AS INT) AS ProductMinorVersion;
Per SQL 2000-2005 è possibile utilizzare:
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;
( PARSENAME(...,0)è un trucco per migliorare la leggibilità)
Quindi un controllo per una versione di SQL 2000+ sarebbe:
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);
Questo è molto più semplice se sei interessato solo a SQL 2008+ perché SERVERPROPERTY('ProductMajorVersion')ritorna NULLper le versioni precedenti, quindi puoi usare:
IF (ISNULL(CAST(SERVERPROPERTY('ProductMajorVersion') AS INT), 0) < 11) -- SQL2012
RAISERROR('You need SQL 2012 or later!', 16, 1);
E puoi usare le proprietà ProductLevele Edition(o EngineEdition) per determinare rispettivamente RTM / SP n / CTP n e Dev / Std / Ent / etc.
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;
Cordiali saluti, i principali numeri di versione di SQL sono:
E tutto questo funziona anche con SQL Azure!
MODIFICATO: potresti anche voler controllare il livello di compatibilità del tuo DB poiché potrebbe essere impostato su una compatibilità inferiore.
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)
Basta usare
SELECT @@VERSION
Uscita campione
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: )
Fonte: come verificare la versione del server sql? (Spiegazione in vari modi)