Comment vérifier quelle version de SQL Server pour une base de données utilisant TSQL ?

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

  •  09-06-2019
  •  | 
  •  

Question

Existe-t-il une procédure stockée système pour obtenir le numéro de version ?

Était-ce utile?

La solution

Essayer

SELECT @@VERSION 

ou pour SQL Server 2000 et supérieur, ce qui suit est plus facile à analyser :)

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

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

Autres conseils

SÉLECTIONNEZ @@VERSION

Je sais que c'est un article plus ancien mais j'ai mis à jour le code trouvé dans le lien (qui est mort le 03/12/2013) mentionné dans le répondre posté par 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'

Pour SQL Server 2000 et versions ultérieures, je préfère l'analyse suivante de la réponse de Joe :

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

Donne les résultats suivants :

Version du serveur de résultats
8.00     SQL 2000
9.00     SQL 2005
10.00    SQL 2008
10.50    SQL 2008R2
11.00    SQL 2012
12.00    SQL 2014

Liste de base des numéros de version ici, ou liste exhaustive de Microsoft ici.

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

Il existe une autre procédure stockée étendue qui peut être utilisée pour voir les informations de version :

exec [master].sys.[xp_msver]

Voici un peu de script que j'utilise pour tester si un serveur date de 2005 ou version ultérieure

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

Note :mis à jour à partir de la réponse originale (voir commentaire)

L'article de la base de connaissances lié dans Le message de Joe est idéal pour déterminer quels service packs ont été installés pour n’importe quelle version.Dans le même esprit, cet article de la base de connaissances mappe les numéros de version à des correctifs spécifiques et à des mises à jour cumulatives, mais cela ne s'applique qu'à SQL05 SP2 et versions ultérieures.

Essaye ça:

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

Obtenir uniquement la version majeure de SQL Server en une seule sélection :

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

Retour 8 pour SQL 2000, 9 pour SQL 2005 et ainsi de suite (testé jusqu'en 2012).

Essayer

SELECT @@MICROSOFTVERSION / 0x01000000 AS MajorVersionNumber

Pour plus d'informations, voir : Requête d'informations sur la version/édition

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

Si tout ce que vous voulez est la version majeure pour des raisons T-SQL, ce qui suit vous donne l'année de la version SQL Server 2000 ou ultérieure.

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

Ce code gère gracieusement les espaces et tabulations supplémentaires pour différentes versions de SQL Server.

Essaye ça:

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

Essaye ça:

SELECT
    'the sqlserver is ' + substring(@@VERSION, 21, 5) AS [sql version]
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top