Cómo verificar la versión de SQL Server

Respuestas:

227

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\ERRORLOGy ERRORLOG.narchivos. 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

Imran
fuente
66
He encontrado que el Método 4 es más confiable que el Método 1: he tenido servidores que no han instalado correctamente un service pack donde el Método 1 y el Método 4 arrojaron resultados diferentes, pero el Método 4 fue correcto.
Kaganar
8
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
Linga
fuente
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

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 @@ERRORcomo la línea de comando ERRORLEVELsi> = 16 (y la segunda línea va a la :ExitFailetiqueta si el antes mencionado ERRORLEVELes> = 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, ProductVersionexiste 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 NULLversiones 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 ProductLevely 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:

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

¡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)
AndrewD
fuente
1

Esto es lo que he hecho para encontrar la versión. Esto es lo que he hecho para encontrar la versión: solo escriba SELECT @@versiony le dará la versión.

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

si este valor es 0 no es una edición express

R.Alonso
fuente