Respostas:
Experimentar
SELECT @@VERSION
ou para o SQL Server 2000 e acima, é mais fácil analisar o seguinte :)
SELECT SERVERPROPERTY('productversion')
, SERVERPROPERTY('productlevel')
, SERVERPROPERTY('edition')
Eu sei que esta é uma postagem mais antiga, mas atualizei o código encontrado no link (que está morto a partir de 2013-12-03) mencionado na resposta postada por 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'
Para o SQL Server 2000 e superior, prefiro a seguinte análise da resposta de Joe:
declare @sqlVers numeric(4,2)
select @sqlVers = left(cast(serverproperty('productversion') as varchar), 4)
Dá resultados da seguinte maneira:
Versão do servidor de resultados 8.00 SQL 2000 9.00 SQL 2005 10.00 SQL 2008 10.50 SQL 2008R2 11.00 SQL 2012 12.00 SQL 2014
Lista básica de números de versão aqui ou lista exaustiva da Microsoft aqui .
select cast(serverproperty('productversion') as varchar) as [result]
. O que quero dizer é que eu posso executar o procedimento acima via ADO.NET ExecuteScalar
e depois analisar a sequência de resultados como um System.Version
objeto. Além disso, convocá-lo para numérico fornece significados diferentes aos números de versão quando se trata de zeros à direita e contagem de dígitos do segmento de versão, enquanto uma sequência pode ser analisada para um Version
objeto válido sem perder a consistência de cada componente da versão.
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
Aqui está um pouco do script que eu uso para testar se um servidor é 2005 ou posterior
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: atualizado a partir da resposta original (ver comentário)
O artigo da KB vinculado na postagem de Joe é ótimo para determinar quais service packs foram instalados para qualquer versão. Na mesma linha, este artigo da KB mapeia os números de versão para hotfixes específicos e atualizações cumulativas, mas só se aplica ao SQL05 SP2 e superior.
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
Experimentar
SELECT @@MICROSOFTVERSION / 0x01000000 AS MajorVersionNumber
Para obter mais informações, consulte: Consultando informações sobre versão / edição.
select substring(@@version,0,charindex(convert(varchar,SERVERPROPERTY('productversion')) ,@@version)+len(convert(varchar,SERVERPROPERTY('productversion'))))
Se tudo o que você deseja é a versão principal por motivos de T-SQL, a seguir, é apresentado o ano da versão do SQL Server para 2000 ou posterior.
SELECT left(ltrim(replace(@@Version,'Microsoft SQL Server','')),4)
Esse código lida com os espaços e guias extras de várias versões do SQL Server.