Respuestas:
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')
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'
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í .
select cast(serverproperty('productversion') as varchar) as [result]
. Mi punto es que puedo ejecutar lo anterior a través de ADO.NET ExecuteScalar
y luego analizar la cadena de resultados como un System.Version
objeto. 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 Version
objeto válido sin perder la consistencia de cada componente de la versión.
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
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)
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.
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
Tratar
SELECT @@MICROSOFTVERSION / 0x01000000 AS MajorVersionNumber
Para obtener más información, consulte: 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 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.