Come controllare la versione di SQL Server


Risposte:


227

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


6
Ho trovato il metodo 4 più affidabile del metodo 1: ho avuto server che non hanno installato correttamente un service pack in cui il metodo 1 e il metodo 4 hanno restituito risultati diversi, ma il metodo 4 era corretto.
Kaganar,

8
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

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

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:

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

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)

1

Ecco cosa ho fatto per trovare la versione Ecco cosa ho fatto per trovare la versione: basta scrivere SELECT @@versione ti darà la versione.



0
select charindex(  'Express',@@version)

se questo valore è 0 non è un'edizione espressa

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.