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

Réponses:

234

Essayer

SELECT @@VERSION 

ou pour SQL Server 2000 et au-dessus, les éléments suivants sont plus faciles à analyser :)

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

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

Joe Kuemerle
la source
1
Le second fonctionne pour moi, et j'ajoute à vérifier sur Wikipedia pour comprendre que 8.00.xx signifie SQL Server 2000
pdem
30

SELECT @@ VERSION

Brannon
la source
28

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 la réponse publiée 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'
Mark Kram
la source
14

Pour SQL Server 2000 et supérieur, 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 comme suit:

Version du serveur de résultats
8.00 SQL 2000
9.00 SQL 2005
10h00 SQL 2008
10.50 SQL 2008R2
11.00 SQL 2012
12h00 SQL 2014

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

Geoff
la source
J'aime ça, sympa, simple et réutilisable sur toutes les versions de serveur. J'ai utilisé une version légèrement modifiée de ce qui précède: select cast(serverproperty('productversion') as varchar) as [result]. Mon point est que je peux exécuter ce qui précède via ADO.NET, ExecuteScalarpuis analyser la chaîne de résultat en tant System.Versionqu'objet. En outre, le convertir en numérique donne des significations différentes aux numéros de version en ce qui concerne les zéros de fin et le nombre de chiffres du segment de version, tandis qu'une chaîne peut être analysée en un Versionobjet valide sans perdre la cohérence de chaque composant de version.
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
la source
3

Voici un peu de script que j'utilise pour tester si un serveur est 2005 ou plus tard

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

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

Bruce Chapman
la source
Je viens de trouver que cela ne fonctionne pas SQL 2008 parce que «10» est inférieur à «9». Vous pouvez modifier la valeur de la réponse mise à jour pour utiliser 8, 9, 10 ou tout ce que vous devez tester comme valeur minimale
Bruce Chapman
3

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]
Zia
la source
2

L'article de la base de connaissances lié dans l'article 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 il s'applique uniquement à SQL05 SP2 et versions ultérieures.

Mat
la source
1

Essaye ça:

if (SELECT LEFT(CAST(SERVERPROPERTY('productversion') as varchar), 2)) = '10'
BEGIN
Freak
la source
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
passage clouté
la source
1

Obtenir uniquement la version principale 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

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

Nux
la source
1
select substring(@@version,0,charindex(convert(varchar,SERVERPROPERTY('productversion')) ,@@version)+len(convert(varchar,SERVERPROPERTY('productversion')))) 
Vikrant Bagal
la source
0

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

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

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

Allen Ackerman
la source
0

Essaye ça:

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

Essaye ça:

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