¿Cómo se comprueba qué versión de SQL Server para una base de datos usando TSQL?

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

  •  09-06-2019
  •  | 
  •  

Pregunta

¿Existe un procedimiento almacenado en el sistema para obtener el número de versión?

¿Fue útil?

Solución

Intentar

SELECT @@VERSION 

o para SQL Server 2000 y superiores, lo siguiente es más fácil de analizar :)

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

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

Otros consejos

SELECCIONAR @@VERSIÓN

Sé que esta es una publicación anterior pero actualicé el código que se encuentra en el enlace (que está muerto a partir del 3 de diciembre de 2013) mencionado en el respuesta publicado 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 y superior, prefiero el siguiente análisis de la respuesta de Joe:

declare @sqlVers numeric(4,2)
select @sqlVers = left(cast(serverproperty('productversion') as varchar), 4)

Da resultados de la siguiente manera:

Versión del 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 versión aquí, o lista exhaustiva de Microsoft aquí.

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

Hay otro procedimiento almacenado extendido que se puede utilizar para ver la información de la versión:

exec [master].sys.[xp_msver]

Aquí hay un fragmento de script que uso para probar si un servidor es 2005 o 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

Nota :actualizado a partir de la respuesta original (ver comentario)

El artículo de KB vinculado en publicación de joe es excelente para determinar qué service packs se han instalado para cualquier versión.En esa misma línea, este artículo de KB asigna números de versión a revisiones específicas y actualizaciones acumulativas, pero solo se aplica a SQL05 SP2 y versiones posteriores.

Prueba esto:

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

Obteniendo solo la versión principal de SQL Server en una sola selección:

SELECT  SUBSTRING(ver, 1, CHARINDEX('.', ver) - 1)
FROM (SELECT CAST(serverproperty('ProductVersion') AS nvarchar) ver) as t

Devoluciones 8 para SQL 2000, 9 para SQL 2005 y demás (probado hasta 2012).

Intentar

SELECT @@MICROSOFTVERSION / 0x01000000 AS MajorVersionNumber

Para más información, ver: Consulta de información de versión/edición

select substring(@@version,0,charindex(convert(varchar,SERVERPROPERTY('productversion')) ,@@version)+len(convert(varchar,SERVERPROPERTY('productversion')))) 

Si lo único que desea es la versión principal por motivos de T-SQL, a continuación encontrará el año de la versión de SQL Server 2000 o posterior.

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

Este código maneja con elegancia los espacios y tabulaciones adicionales para varias versiones de SQL Server.

Prueba esto:

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

Prueba esto:

SELECT
    'the sqlserver is ' + substring(@@VERSION, 21, 5) AS [sql version]
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top