Risposte:
Provare
SELECT @@VERSION
o per SQL Server 2000 e versioni successive è più semplice analizzare :)
SELECT SERVERPROPERTY('productversion')
, SERVERPROPERTY('productlevel')
, SERVERPROPERTY('edition')
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'
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 .
select cast(serverproperty('productversion') as varchar) as [result]
. Il mio punto è che posso eseguire quanto sopra tramite ADO.NET ExecuteScalar
e quindi analizzare la stringa del risultato come System.Version
oggetto. 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 Version
oggetto valido senza perdere la coerenza di ciascun componente della versione.
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
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)
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.
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
Provare
SELECT @@MICROSOFTVERSION / 0x01000000 AS MajorVersionNumber
Per ulteriori informazioni, consultare: 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, 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.