2008-09-12 9 views

Respuesta

215

Trate

SELECT @@VERSION 

o para SQL Server 2000 y por encima de los siguientes es más fácil de analizar :)

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

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

+1

El segundo funciona para mí, y lo agrego para verificar en Wikipedia que entiendo que 8.00.xx significa SQL server 2000 – pdem

1

El El artículo de KB enlazado en Joe's post es ideal para determinar wh Estos paquetes de servicio se han instalado para cualquier versión. En las mismas líneas, this KB article correlaciona números de versión con revisiones específicas y actualizaciones acumulativas, pero solo se aplica a SQL05 SP2 y posteriores.

2

Aquí hay un poco de secuencia de comandos que utilizo 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: actualizada de respuesta original (ver comentario)

+0

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

1

Prueba esto:

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

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:

 
Result Server Version 
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 los números de versión here, o lista exhaustiva de Microsoft here.

+0

Me gusta, agradable, simple y resusuable en todas las versiones de servidor. Usé una versión ligeramente modificada de lo anterior: 'select cast (serverproperty ('productversion') como varchar) como [resultado]'. Mi punto es que puedo ejecutar lo anterior a través de 'ExecuteScalar' de ADO.NET y luego analizar la cadena de resultados como un objeto' System.Version'. Además, convertirlo en numérico le da diferentes significados a los números de versión cuando se trata de ceros al final y conteo de dígitos del segmento de la versión, mientras que una cadena se puede analizar a un objeto 'Version' válido sin perder la consistencia de cada componente de la versión. –

+0

Esto está mal. '12.00' es igual a' SQL Server 2014'. – l33t

+0

@ l33t: Gracias, corregido. – Geoff

23

Sé que esto es un mensaje más antiguo, pero he actualizado el código que se encuentra en el link (que ha muerto como del 12.03.2013) mencionado en el answer publicados 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 
    SELECT 'Unsupported SQL Server Version' 
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

recibiendo sólo la versión principal de SQL Server en un solo seleccionar:

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

devoluciones 8 para SQL 2000, SQL 2005 para 9 y así sucesivamente (probado hasta 2012).

3

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

exec [master].sys.[xp_msver] 
3
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' ('[email protected] + N'), ' + @Edition + ' - ' + @ProductVersion; 

END 
GO 
-1

seleccione 'del sqlserver es' + subcadena (@@ VERSION, 21,5) 'versión de SQL '

0

Si todo lo que quiere es la versión principal por motivos de T-SQL, a continuación le mostramos 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 controla con gracia los espacios adicionales y las pestañas para varias versiones de SQL Server.

0

Prueba esto:

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