Domanda

Esiste una procedura memorizzata di sistema per ottenere la versione #?

È stato utile?

Soluzione

Tentativo

SELECT @@VERSION 

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

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

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

Altri suggerimenti

SELEZIONA @@VERSIONE

So che questo è un post più vecchio ma ho aggiornato il codice trovato nel file collegamento (che è morto dal 03-12-2013) menzionato nel file risposta Pubblicato 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'

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

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

Fornisce i 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 un elenco esaustivo di Microsoft Qui.

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

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

exec [master].sys.[xp_msver]

Ecco un po' di script che utilizzo per testare se un server è del 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)

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

Prova questo:

if (SELECT LEFT(CAST(SERVERPROPERTY('productversion') as varchar), 2)) = '10'
BEGIN
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

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

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

Tentativo

SELECT @@MICROSOFTVERSION / 0x01000000 AS MajorVersionNumber

Per ulteriori informazioni, vedere: Richiesta di informazioni sulla versione/edizione

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

Se tutto ciò che desideri è la versione principale per motivi T-SQL, quanto segue ti fornisce 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 aggiuntivi per varie versioni di SQL Server.

Prova questo:

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

Prova questo:

SELECT
    'the sqlserver is ' + substring(@@VERSION, 21, 5) AS [sql version]
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top