¿Cuáles son las formas posibles de determinar la versión implementada de SQL Server?
Intenté hacerlo usando el software SQL Server. Quiero hacerlo usando una instrucción SQL de línea de comando.
¿Cuáles son las formas posibles de determinar la versión implementada de SQL Server?
Intenté hacerlo usando el software SQL Server. Quiero hacerlo usando una instrucción SQL de línea de comando.
Respuestas:
Las siguientes son formas posibles de ver la versión:
Método 1: conéctese a la instancia de SQL Server y luego ejecute la siguiente consulta:
Select @@version
Un ejemplo del resultado de esta consulta es el siguiente:
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: conéctese al servidor utilizando Object Explorer en SQL Server Management Studio. Después de que se conecte el Explorador de objetos, mostrará la información de la versión entre paréntesis, junto con el nombre de usuario que se usa para conectarse a la instancia específica de SQL Server.
Método 3: Mire las primeras líneas del archivo Errorlog para esa instancia. De manera predeterminada, el registro de errores se encuentra en Archivos de programa \ Microsoft SQL Server\MSSQL.n\MSSQL\LOG\ERRORLOG
y ERRORLOG.n
archivos. Las entradas pueden parecerse a lo siguiente:
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 puede ver, esta entrada proporciona toda la información necesaria sobre el producto, como la versión, el nivel del producto, 64 bits frente a 32 bits, la edición de SQL Server y la versión del sistema operativo en la que se ejecuta SQL Server.
Método 4: conéctese a la instancia de SQL Server y luego ejecute la siguiente consulta:
SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')
Nota: esta consulta funciona con cualquier instancia de SQL Server 2000 o de una versión posterior
declare @sqlVers numeric(4,2)
select @sqlVers = left(cast(serverproperty('productversion') as varchar), 4)
Da 8.00, 9.00, 10.00 y 10.50 para SQL 2000, 2005, 2008 y 2008R2 respectivamente.
Además, pruebe el procedimiento extendido del sistema xp_msver
. Puede llamar a este procedimiento almacenado 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
Esto usa SQLCMD (viene con SQL Server) para conectarse a la instancia del servidor local usando la autenticación de Windows, arroja un error si falla una verificación de versión y devuelve el @@ERROR
como la línea de comando ERRORLEVEL
si> = 16 (y la segunda línea va a la :ExitFail
etiqueta si el antes mencionado ERRORLEVEL
es> = 1).
Watchas, Gotchas y más información
Para SQL 2000+, puede usar SERVERPROPERTY para determinar mucha de esta información.
Si bien SQL 2008+ admite las propiedades ProductMajorVersion
& ProductMinorVersion
, ProductVersion
existe desde el año 2000 (recordando que si una propiedad no es compatible, la función regresa NULL
).
Si está interesado en versiones anteriores, puede usar el PARSENAME
función para dividir el ProductVersion
(recordando que las "partes" están numeradas de derecha a izquierda, es decir, PARSENAME('a.b.c', 1)
retornos c
).
También recuerda que PARSENAME('a.b.c', 4)
regresa NULL
, porque SQL 2005 y versiones anteriores solo usaban 3 partes en el número de versión!
Entonces, para SQL 2008+, simplemente puede usar:
SELECT
SERVERPROPERTY('ProductVersion') AS ProductVersion,
CAST(SERVERPROPERTY('ProductMajorVersion') AS INT) AS ProductMajorVersion,
CAST(SERVERPROPERTY ('ProductMinorVersion') AS INT) AS ProductMinorVersion;
Para SQL 2000-2005 puede 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;
(El PARSENAME(...,0)
es un truco para mejorar la legibilidad)
Entonces, una comprobación para una versión SQL 2000+ sería:
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);
Esto es mucho más simple si solo está interesado en SQL 2008+ porque SERVERPROPERTY('ProductMajorVersion')
devuelve NULL
versiones anteriores, por lo que puede usar:
IF (ISNULL(CAST(SERVERPROPERTY('ProductMajorVersion') AS INT), 0) < 11) -- SQL2012
RAISERROR('You need SQL 2012 or later!', 16, 1);
Y puede usar las propiedades ProductLevel
y Edition
(o EngineEdition
) para determinar RTM / SP n / CTP ny 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 su información, los principales números de versión de SQL son:
¡Y todo esto también funciona para SQL Azure!
EDITADO: es posible que también desee verificar el nivel de compatibilidad de su base de datos, ya que podría establecerse en una compatibilidad menor.
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)
Simplemente use
SELECT @@VERSION
Salida de muestra
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: )
Fuente: ¿Cómo verificar la versión del servidor SQL? (Se explican varias formas)