¿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

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

SELECCIONE @@ VERSIÓN

Brannon
fuente
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'
Mark Kram
fuente
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í .

Geoff
fuente
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
Alex
fuente
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)

Bruce Chapman
fuente
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]
Zia
fuente
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.

Mate
fuente
1

Prueba esto:

if (SELECT LEFT(CAST(SERVERPROPERTY('productversion') as varchar), 2)) = '10'
BEGIN
monstruo
fuente
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
paso de peatones
fuente
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).

Nux
fuente
1
select substring(@@version,0,charindex(convert(varchar,SERVERPROPERTY('productversion')) ,@@version)+len(convert(varchar,SERVERPROPERTY('productversion')))) 
Vikrant Bagal
fuente
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.

Allen Ackerman
fuente
0

Prueba esto:

SELECT @@VERSION[server], SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')
Arif
fuente
-1

Prueba esto:

SELECT
    'the sqlserver is ' + substring(@@VERSION, 21, 5) AS [sql version]
pruthvi
fuente