Come si controlla quale versione di SQL Server per un database utilizzando TSQL?


Risposte:


234

Provare

SELECT @@VERSION 

o per SQL Server 2000 e versioni successive è più semplice analizzare :)

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

Da: http://support.microsoft.com/kb/321185


1
Il secondo funziona per me e aggiungo di controllare su Wikipedia per capire che 8.00.xx significa SQL Server 2000
pdem,


28

So che questo è un post più vecchio ma ho aggiornato il codice trovato nel link (che è morto dal 03-12-2013) menzionato nella risposta pubblicata da Matt Rogish :

DECLARE @ver nvarchar(128)
SET @ver = CAST(serverproperty('ProductVersion') AS nvarchar)
SET @ver = SUBSTRING(@ver, 1, CHARINDEX('.', @ver) - 1)

IF ( @ver = '7' )
   SELECT 'SQL Server 7'
ELSE IF ( @ver = '8' )
   SELECT 'SQL Server 2000'
ELSE IF ( @ver = '9' )
   SELECT 'SQL Server 2005'
ELSE IF ( @ver = '10' )
   SELECT 'SQL Server 2008/2008 R2'
ELSE IF ( @ver = '11' )
   SELECT 'SQL Server 2012'
ELSE IF ( @ver = '12' )
   SELECT 'SQL Server 2014'
ELSE IF ( @ver = '13' )
   SELECT 'SQL Server 2016'
ELSE IF ( @ver = '14' )
   SELECT 'SQL Server 2017'
ELSE
   SELECT 'Unsupported SQL Server Version'

14

Per SQL Server 2000 e versioni successive, preferisco l'analisi seguente della risposta di Joe:

declare @sqlVers numeric(4,2)
select @sqlVers = left(cast(serverproperty('productversion') as varchar), 4)

Fornisce risultati come segue:

Versione del server dei risultati
8.00 SQL 2000
9.00 SQL 2005
10.00 SQL 2008
10.50 SQL 2008R2
11.00 SQL 2012
12.00 SQL 2014

Elenco di base dei numeri di versione qui o elenco completo di Microsoft qui .


Mi piace questo, bello, semplice e riutilizzabile tra le versioni del server. Ho usato una versione leggermente modificata di quanto sopra: select cast(serverproperty('productversion') as varchar) as [result]. Il mio punto è che posso eseguire quanto sopra tramite ADO.NET ExecuteScalare quindi analizzare la stringa del risultato come System.Versionoggetto. Inoltre, convocarlo in numerico dà significati diversi ai numeri di versione quando si tratta di zeri finali e conteggio delle cifre del segmento di versione, mentre una stringa può essere analizzata su un Versionoggetto valido senza perdere la coerenza di ciascun componente della versione.
Ivaylo Slavov,

4
CREATE FUNCTION dbo.UFN_GET_SQL_SEVER_VERSION 
(
)
RETURNS sysname
AS
BEGIN
    DECLARE @ServerVersion sysname, @ProductVersion sysname, @ProductLevel sysname, @Edition sysname;

    SELECT @ProductVersion = CONVERT(sysname, SERVERPROPERTY('ProductVersion')), 
           @ProductLevel = CONVERT(sysname, SERVERPROPERTY('ProductLevel')),
           @Edition = CONVERT(sysname, SERVERPROPERTY ('Edition'));
    --see: http://support2.microsoft.com/kb/321185
    SELECT @ServerVersion = 
        CASE 
            WHEN @ProductVersion LIKE '8.00.%' THEN 'Microsoft SQL Server 2000'
            WHEN @ProductVersion LIKE '9.00.%' THEN 'Microsoft SQL Server 2005'
            WHEN @ProductVersion LIKE '10.00.%' THEN 'Microsoft SQL Server 2008'
            WHEN @ProductVersion LIKE '10.50.%' THEN 'Microsoft SQL Server 2008 R2'
            WHEN @ProductVersion LIKE '11.0%' THEN 'Microsoft SQL Server 2012'
            WHEN @ProductVersion LIKE '12.0%' THEN 'Microsoft SQL Server 2014'
        END

    RETURN @ServerVersion + N' ('+@ProductLevel + N'), ' + @Edition + ' - ' + @ProductVersion;

END
GO

3

Ecco un po 'di script che uso per testare se un server è 2005 o successivo

declare @isSqlServer2005 bit
select @isSqlServer2005 = case when CONVERT(int, SUBSTRING(CONVERT(varchar(15), SERVERPROPERTY('productversion')), 0, CHARINDEX('.', CONVERT(varchar(15), SERVERPROPERTY('productversion'))))) < 9 then 0 else 1 end
select @isSqlServer2005

Nota: aggiornato dalla risposta originale (vedi commento)


Ho appena scoperto che non funziona sql 2008 perché "10" è inferiore a "9". È possibile modificare il valore nella risposta aggiornata per utilizzare 8, 9, 10 o qualsiasi altra cosa sia necessario testare come valore minimo
Bruce Chapman,

3

Esiste un'altra procedura memorizzata estesa che può essere utilizzata per visualizzare le informazioni sulla versione:

exec [master].sys.[xp_msver]

2

L'articolo KB collegato nel post di Joe è ottimo per determinare quali service pack sono stati installati per qualsiasi versione. Sulla stessa linea, questo articolo KB associa i numeri di versione a hotfix specifici e aggiornamenti cumulativi, ma si applica solo a SQL05 SP2 e versioni successive.


1

Prova questo:

if (SELECT LEFT(CAST(SERVERPROPERTY('productversion') as varchar), 2)) = '10'
BEGIN

1
SELECT 
@@SERVERNAME AS ServerName,
CASE WHEN LEFT(CAST(serverproperty('productversion') as char), 1) = 9 THEN '2005'
 WHEN LEFT(CAST(serverproperty('productversion') as char), 2) = 10 THEN '2008'
 WHEN LEFT(CAST(serverproperty('productversion') as char), 2) = 11 THEN '2012'
END AS MajorVersion,
SERVERPROPERTY ('productlevel') AS MinorVersion, 
SERVERPROPERTY('productversion') AS FullVersion, 
SERVERPROPERTY ('edition') AS Edition

1

Ottenere solo la versione principale di SQL Server in un'unica selezione:

SELECT  SUBSTRING(ver, 1, CHARINDEX('.', ver) - 1)
FROM (SELECT CAST(serverproperty('ProductVersion') AS nvarchar) ver) as t

Restituisce 8per SQL 2000, 9per SQL 2005 e così via (testato fino al 2012).



1
select substring(@@version,0,charindex(convert(varchar,SERVERPROPERTY('productversion')) ,@@version)+len(convert(varchar,SERVERPROPERTY('productversion')))) 

0

Se tutto ciò che desideri è la versione principale per motivi T-SQL, di seguito viene riportato l'anno della versione di SQL Server per il 2000 o successivo.

SELECT left(ltrim(replace(@@Version,'Microsoft SQL Server','')),4)

Questo codice gestisce con garbo gli spazi e le schede extra per varie versioni di SQL Server.


0

Prova questo:

SELECT @@VERSION[server], SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')

-1

Prova questo:

SELECT
    'the sqlserver is ' + substring(@@VERSION, 21, 5) AS [sql version]
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.