Como verificar a versão do SQL Server

Respostas:

227

A seguir, são possíveis maneiras de ver a versão:

Método 1: Conecte-se à instância do SQL Server e execute a seguinte consulta:

Select @@version

Um exemplo da saída desta consulta é o seguinte:

Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (X64)   Mar 29 2009 
10:11:52   Copyright (c) 1988-2008 Microsoft Corporation  Express 
Edition (64-bit) on Windows NT 6.1 <X64> (Build 7600: )

Método 2: Conecte-se ao servidor usando o Pesquisador de Objetos no SQL Server Management Studio. Depois que o Object Explorer estiver conectado, ele mostrará as informações da versão entre parênteses, juntamente com o nome de usuário usado para conectar-se à instância específica do SQL Server.

Método 3: Examine as primeiras linhas do arquivo Errorlog para essa instância. Por padrão, o log de erros está localizado em Arquivos de Programas \ Microsoft SQL Server\MSSQL.n\MSSQL\LOG\ERRORLOGe ERRORLOG.narquivos. As entradas podem se parecer com o seguinte:

2011-03-27 22:31:33.50 Server      Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (X64)                 Mar 29 2009 10:11:52                 Copyright (c) 1988-2008 Microsoft Corporation                Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7600: )

Como você pode ver, esta entrada fornece todas as informações necessárias sobre o produto, como versão, nível do produto, 64 bits versus 32 bits, a edição do SQL Server e a versão do SO em que o SQL Server está sendo executado.

Método 4: Conecte-se à instância do SQL Server e execute a seguinte consulta:

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

Nota Esta consulta funciona com qualquer instância do SQL Server 2000 ou de uma versão posterior

Imran
fonte
6
Eu achei o método 4 mais confiável que o método 1 - tive servidores que não obtiveram um service pack instalado corretamente, nos quais os métodos 1 e 4 retornaram resultados diferentes, mas o método 4 estava correto.
precisa saber é o seguinte
8
declare @sqlVers numeric(4,2)
select @sqlVers = left(cast(serverproperty('productversion') as varchar), 4)

Dá 8,00, 9,00, 10,00 e 10,50 para SQL 2000, 2005, 2008 e 2008R2, respectivamente.

Além disso, tente o procedimento estendido do sistema xp_msver. Você pode chamar esse procedimento armazenado como

exec master..xp_msver
Linga
fonte
2

TL; DR

SQLCMD -S (LOCAL) -E -V 16 -Q "IF(ISNULL(CAST(SERVERPROPERTY('ProductMajorVersion') AS INT),0)<11) RAISERROR('You need SQL 2012 or later!',16,1)"
IF ERRORLEVEL 1 GOTO :ExitFail

Isso usa SQLCMD (fornecido com o SQL Server) para conectar-se à instância do servidor local usando autenticação do Windows, gera um erro se uma verificação de versão falhar e retorna @@ERRORcomo a linha de comando ERRORLEVELse> = 16 (e a segunda linha vai para o :ExitFailrótulo se o acima mencionado ERRORLEVELé> = 1).

Watchas, Gotchas e mais informações

Para o SQL 2000+, você pode usar o SERVERPROPERTY para determinar muitas dessas informações.

Embora o SQL 2008+ suporte as propriedades ProductMajorVersion& ProductMinorVersion, ProductVersionexiste desde 2000 (lembrando que, se uma propriedade não for suportada, a função retornará NULL).

Se você está interessado em versões anteriores, pode usar a PARSENAMEfunção para dividir a ProductVersion(lembrando que as "partes" são numeradas da direita para a esquerda, ou seja, PARSENAME('a.b.c', 1)retornam c).

Lembre-se também de que PARSENAME('a.b.c', 4)retorna NULL, porque o SQL 2005 e versões anteriores usaram apenas três partes no número da versão!

Portanto, para o SQL 2008+, você pode simplesmente usar:

SELECT
    SERVERPROPERTY('ProductVersion') AS ProductVersion,
    CAST(SERVERPROPERTY('ProductMajorVersion')  AS INT) AS ProductMajorVersion,
    CAST(SERVERPROPERTY ('ProductMinorVersion') AS INT) AS ProductMinorVersion;

Para o SQL 2000-2005, você pode usar:

SELECT
    SERVERPROPERTY('ProductVersion') AS ProductVersion,
    CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 3 ELSE 4 END) AS INT) AS ProductVersion_Major,
    CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 2 ELSE 3 END) AS INT) AS ProductVersion_Minor,
    CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 1 ELSE 2 END) AS INT) AS ProductVersion_Revision,
    CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 0 ELSE 1 END) AS INT) AS ProductVersion_Build;

(o PARSENAME(...,0)é um truque para melhorar a legibilidade)

Portanto, uma verificação para uma versão do SQL 2000+ seria:

IF (CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 3 ELSE 4 END) AS INT) < 10) -- SQL2008
OR (
    (CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 3 ELSE 4 END) AS INT) = 10) -- SQL2008
AND (CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 2 ELSE 1 END) AS INT) < 5)  -- R2 (this may need to be 50)
   )
    RAISERROR('You need SQL 2008R2 or later!', 16, 1);

Isso é muito mais simples se você estiver interessado apenas no SQL 2008+, pois SERVERPROPERTY('ProductMajorVersion')retorna NULLpara versões anteriores, para que você possa usar:

IF (ISNULL(CAST(SERVERPROPERTY('ProductMajorVersion') AS INT), 0) < 11) -- SQL2012
    RAISERROR('You need SQL 2012 or later!', 16, 1);

E você pode usar as propriedades ProductLevele Edition(ou EngineEdition) para determinar RTM / SP n / CTP ne Dev / Std / Ent / etc, respectivamente.

SELECT
    CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME) AS ProductVersion,
    CAST(SERVERPROPERTY('ProductLevel') AS SYSNAME)   AS ProductLevel,
    CAST(SERVERPROPERTY('Edition') AS SYSNAME)        AS Edition,
    CAST(SERVERPROPERTY('EngineEdition') AS INT)      AS EngineEdition;

Para sua informação, os principais números de versão SQL são:

  • 8 = SQL 2000
  • 9 = SQL 2005
  • 10 = SQL 2008 (e 10.5 = SQL 2008R2)
  • 11 = SQL 2012
  • 12 = SQL 2014
  • 13 = SQL 2016
  • 14 = SQL 2017

E isso tudo funciona também para o SQL Azure!

EDITADO: Você também pode verificar o seu nível de compatibilidade com o banco de dados, pois ele pode ser configurado com uma compatibilidade mais baixa.

IF EXISTS (SELECT * FROM sys.databases WHERE database_id=DB_ID() AND [compatibility_level] < 110)
    RAISERROR('Database compatibility level must be SQL2008R2 or later (110)!', 16, 1)
AndrewD
fonte
1

Aqui está o que eu fiz para encontrar a versão Aqui está o que eu fiz para encontrar a versão: basta escrever SELECT @@versione ela fornecerá a versão.

Imad Ullah
fonte
0
select charindex(  'Express',@@version)

se esse valor for 0 não for uma edição expressa

R.Alonso
fonte