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

StackOverflow https://stackoverflow.com/questions/59444

  •  09-06-2019
  •  | 
  •  

Pergunta

Existe um procedimento armazenado do sistema para obter a versão #?

Foi útil?

Solução

Tentar

SELECT @@VERSION 

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

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

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

Outras dicas

SELECIONE @@VERSÃO

Eu sei que este é um post antigo, mas atualizei o código encontrado no link (que está morto em 03/12/2013) mencionado no responder postado 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 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)

Fornece resultados da seguinte forma:

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.

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

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

exec [master].sys.[xp_msver]

Aqui está um script que 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

Observação :atualizado da resposta original (ver comentário)

O artigo da base de conhecimento vinculado em Postagem de Joe é ótimo para determinar quais service packs foram instalados para qualquer versão.Nessa mesma linha, este artigo da base de conhecimento mapeia números de versão para hotfixes específicos e atualizações cumulativas, mas se aplica apenas ao SQL05 SP2 e superior.

Experimente isto:

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

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

Devoluções 8 para SQL2000, 9 para SQL 2005 e assim por diante (testado até 2012).

Tentar

SELECT @@MICROSOFTVERSION / 0x01000000 AS MajorVersionNumber

Para mais informações, veja: Consultando informações de 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 do T-SQL, o seguinte fornece o ano da versão do SQL Server 2000 ou posterior.

SELECT left(ltrim(replace(@@Version,'Microsoft SQL Server','')),4)

Este código lida normalmente com espaços e tabulações extras para várias versões do SQL Server.

Experimente isto:

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

Experimente isto:

SELECT
    'the sqlserver is ' + substring(@@VERSION, 21, 5) AS [sql version]
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top