Como você verifica qual versão do SQL Server para um banco de dados usando TSQL?

Respostas:

234

Experimentar

SELECT @@VERSION 

ou para o SQL Server 2000 e acima, é mais fácil analisar o seguinte :)

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

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

Joe Kuemerle
fonte
1
O segundo funciona para mim, e eu adiciono para verificar Wikipedia entender que 8.00.xx meios servidor SQL 2000
PDEM
30

SELECT @@ VERSION

Brannon
fonte
28

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'
Mark Kram
fonte
14

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 .

Geoff
fonte
Eu gosto disso, agradável, simples e reutilizável nas versões do servidor. Eu usei uma versão ligeiramente modificada do acima: select cast(serverproperty('productversion') as varchar) as [result]. O que quero dizer é que eu posso executar o procedimento acima via ADO.NET ExecuteScalare depois analisar a sequência de resultados como um System.Versionobjeto. 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 Versionobjeto válido sem perder a consistência de cada componente da versão.
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
Alex
fonte
3

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)

Bruce Chapman
fonte
Acabei de descobrir que isso não funciona no sql 2008 porque '10' é menor que '9'. Você pode alterar o valor na resposta atualizada para uso 8, 9, 10 ou seja lá o que você precisa para teste como um valor mínimo
Bruce Chapman
3

Há outro procedimento armazenado estendido que pode ser usado para ver as informações da versão:

exec [master].sys.[xp_msver]
Zia
fonte
2

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.

Matt
fonte
1

Tente o seguinte:

if (SELECT LEFT(CAST(SERVERPROPERTY('productversion') as varchar), 2)) = '10'
BEGIN
aberração
fonte
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
faixa de pedestre
fonte
1

Obtendo apenas a versão principal do SQL Server em uma única seleção:

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

Retorna 8para SQL 2000, 9SQL 2005 e assim por diante (testado até 2012).

Nux
fonte
1

Experimentar

SELECT @@MICROSOFTVERSION / 0x01000000 AS MajorVersionNumber

Para obter mais informações, consulte: Consultando informações sobre versão / edição.

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

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.

Allen Ackerman
fonte
0

Tente o seguinte:

SELECT @@VERSION[server], SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')
Arif
fonte
-1

Tente o seguinte:

SELECT
    'the sqlserver is ' + substring(@@VERSION, 21, 5) AS [sql version]
pruthvi
fonte