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


Respuestas:


234

Tratar

SELECT @@VERSION 

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

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

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


1
El segundo funciona para mí, y agrego a comprobar en Wikipedia para comprender que 8.00.xx significa SQL Server 2000
pdem


28

Sé que esta es una publicación anterior, pero actualicé el código encontrado en el enlace (que está muerto desde el 03/12/2013) mencionado en la respuesta publicada 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'

14

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í .


Me gusta esto, agradable, simple y reutilizable en todas las versiones del servidor. Solía una versión ligeramente modificada de lo anterior: select cast(serverproperty('productversion') as varchar) as [result]. Mi punto es que puedo ejecutar lo anterior a través de ADO.NET ExecuteScalary luego analizar la cadena de resultados como un System.Versionobjeto. Además, convertirlo en numérico proporciona diferentes significados a los números de versión cuando se trata de ceros finales y recuento de dígitos del segmento de versión, mientras que una cadena se puede analizar a un Versionobjeto válido sin perder la consistencia de cada componente de la versión.
Ivaylo Slavov

4
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

3

Aquí hay un poco 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 de la respuesta original (ver comentario)


Acabo de descubrir que esto no funciona en sql 2008 porque '10' es menor que '9'. Puede cambiar el valor en la respuesta actualizada para usar 8, 9, 10 o lo que necesite para probar como valor mínimo
Bruce Chapman

3

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

exec [master].sys.[xp_msver]

2

El artículo de KB vinculado en la publicación de Joe es excelente para determinar qué paquetes de servicio 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 posteriores.


1

Prueba esto:

if (SELECT LEFT(CAST(SERVERPROPERTY('productversion') as varchar), 2)) = '10'
BEGIN

1
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

1

Obtener 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

Devuelve 8para SQL 2000, 9para SQL 2005, etc. (probado hasta 2012).



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

0

Si todo lo que desea es la versión principal por razones de T-SQL, a continuación le damos el año de la versión de SQL Server para 2000 o posterior.

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

Este código maneja con gracia los espacios y pestañas adicionales para varias versiones de SQL Server.


0

Prueba esto:

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

-1

Prueba esto:

SELECT
    'the sqlserver is ' + substring(@@VERSION, 21, 5) AS [sql version]
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.