Quais são as formas possíveis de determinar a versão implantada do SQL Server?
Eu tentei fazer isso usando o software SQL Server. Eu quero fazer isso usando uma instrução SQL de linha de comando.
Quais são as formas possíveis de determinar a versão implantada do SQL Server?
Eu tentei fazer isso usando o software SQL Server. Eu quero fazer isso usando uma instrução SQL de linha de comando.
Respostas:
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\ERRORLOG
e ERRORLOG.n
arquivos. 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
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
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 @@ERROR
como a linha de comando ERRORLEVEL
se> = 16 (e a segunda linha vai para o :ExitFail
ró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
, ProductVersion
existe 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 PARSENAME
funçã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 NULL
para 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 ProductLevel
e 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:
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)
Basta usar
SELECT @@VERSION
Saída de amostra
Microsoft SQL Server 2012 - 11.0.2100.60 (X64)
Feb 10 2012 19:39:15
Copyright (c) Microsoft Corporation
Express Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )
Fonte: Como verificar a versão do servidor sql? (Várias maneiras explicadas)