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


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


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'

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 .


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

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)


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]

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.


1

Tente o seguinte:

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

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).



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

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.


0

Tente o seguinte:

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

-1

Tente o seguinte:

SELECT
    'the sqlserver is ' + substring(@@VERSION, 21, 5) AS [sql version]
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.