Comment vérifier la version de SQL Server

Réponses:

227

Voici des façons possibles de voir la version:

Méthode 1: connectez - vous à l'instance de SQL Server, puis exécutez la requête suivante:

Select @@version

Voici un exemple de la sortie de cette requête:

Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (X64)   Mar 29 2009 
10:11:52   Copyright (c) 1988-2008 Microsoft Corporation  Express 
Edition (64-bit) on Windows NT 6.1 <X64> (Build 7600: )

Méthode 2: connectez - vous au serveur à l'aide de l'Explorateur d'objets dans SQL Server Management Studio. Une fois l'Explorateur d'objets connecté, il affichera les informations de version entre parenthèses, ainsi que le nom d'utilisateur utilisé pour se connecter à l'instance spécifique de SQL Server.

Méthode 3: regardez les premières lignes du fichier Errorlog pour cette instance. Par défaut, le journal des erreurs se trouve dans Program Files \ Microsoft SQL Server\MSSQL.n\MSSQL\LOG\ERRORLOGet ERRORLOG.nfichiers. Les entrées peuvent ressembler à ce qui suit:

2011-03-27 22:31:33.50 Server      Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (X64)                 Mar 29 2009 10:11:52                 Copyright (c) 1988-2008 Microsoft Corporation                Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7600: )

Comme vous pouvez le voir, cette entrée donne toutes les informations nécessaires sur le produit, telles que la version, le niveau du produit, 64 bits contre 32 bits, l'édition de SQL Server et la version du système d'exploitation sur lequel SQL Server s'exécute.

Méthode 4: connectez - vous à l'instance de SQL Server, puis exécutez la requête suivante:

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

Remarque Cette requête fonctionne avec n'importe quelle instance de SQL Server 2000 ou d'une version ultérieure

Imran
la source
6
J'ai trouvé que la méthode 4 était plus fiable que la méthode 1 - j'ai eu des serveurs sur lesquels un service pack n'était pas installé correctement où la méthode 1 et la méthode 4 renvoyaient des résultats différents, mais la méthode 4 était correcte.
Kaganar
8
declare @sqlVers numeric(4,2)
select @sqlVers = left(cast(serverproperty('productversion') as varchar), 4)

Donne 8,00, 9,00, 10,00 et 10,50 pour SQL 2000, 2005, 2008 et 2008R2 respectivement.

Essayez également la procédure étendue du système xp_msver. Vous pouvez appeler cette procédure stockée comme

exec master..xp_msver
Linga
la source
2

TL; DR

SQLCMD -S (LOCAL) -E -V 16 -Q "IF(ISNULL(CAST(SERVERPROPERTY('ProductMajorVersion') AS INT),0)<11) RAISERROR('You need SQL 2012 or later!',16,1)"
IF ERRORLEVEL 1 GOTO :ExitFail

Cela utilise SQLCMD (livré avec SQL Server) pour se connecter à l'instance de serveur local à l'aide de l'authentification Windows, émettre une erreur si une vérification de version échoue et renvoyer le @@ERRORcomme ligne de commande ERRORLEVELsi> = 16 (et la deuxième ligne va à l' :ExitFailétiquette si le mentionné ci ERRORLEVEL- dessus est> = 1).

Watchas, Gotchas et plus d'informations

Pour SQL 2000+, vous pouvez utiliser SERVERPROPERTY pour déterminer une grande partie de ces informations.

Alors que SQL 2008+ prend en charge les propriétés ProductMajorVersion& ProductMinorVersion, ProductVersionil existe depuis 2000 (en se souvenant que si une propriété n'est pas prise en charge, la fonction retourne NULL).

Si vous êtes intéressé par les versions antérieures, vous pouvez utiliser la PARSENAMEfonction pour diviser le ProductVersion(en vous rappelant que les "parties" sont numérotées de droite à gauche, c'est-à-dire PARSENAME('a.b.c', 1)retours c).

Rappelez-vous également que PARSENAME('a.b.c', 4)renvoie NULL, car SQL 2005 et les versions antérieures n'utilisaient que 3 parties dans le numéro de version!

Donc, pour SQL 2008+, vous pouvez simplement utiliser:

SELECT
    SERVERPROPERTY('ProductVersion') AS ProductVersion,
    CAST(SERVERPROPERTY('ProductMajorVersion')  AS INT) AS ProductMajorVersion,
    CAST(SERVERPROPERTY ('ProductMinorVersion') AS INT) AS ProductMinorVersion;

Pour SQL 2000-2005, vous pouvez utiliser:

SELECT
    SERVERPROPERTY('ProductVersion') AS ProductVersion,
    CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 3 ELSE 4 END) AS INT) AS ProductVersion_Major,
    CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 2 ELSE 3 END) AS INT) AS ProductVersion_Minor,
    CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 1 ELSE 2 END) AS INT) AS ProductVersion_Revision,
    CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 0 ELSE 1 END) AS INT) AS ProductVersion_Build;

( PARSENAME(...,0)c'est un hack pour améliorer la lisibilité)

Donc, une vérification pour une version SQL 2000+ serait:

IF (CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 3 ELSE 4 END) AS INT) < 10) -- SQL2008
OR (
    (CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 3 ELSE 4 END) AS INT) = 10) -- SQL2008
AND (CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 2 ELSE 1 END) AS INT) < 5)  -- R2 (this may need to be 50)
   )
    RAISERROR('You need SQL 2008R2 or later!', 16, 1);

C'est beaucoup plus simple si vous n'êtes intéressé que par SQL 2008+ car SERVERPROPERTY('ProductMajorVersion')renvoie NULLpour les versions antérieures, vous pouvez donc utiliser:

IF (ISNULL(CAST(SERVERPROPERTY('ProductMajorVersion') AS INT), 0) < 11) -- SQL2012
    RAISERROR('You need SQL 2012 or later!', 16, 1);

Et vous pouvez utiliser les propriétés ProductLevelet Edition(ou EngineEdition) pour déterminer respectivement RTM / SP n / CTP n et Dev / Std / Ent / etc.

SELECT
    CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME) AS ProductVersion,
    CAST(SERVERPROPERTY('ProductLevel') AS SYSNAME)   AS ProductLevel,
    CAST(SERVERPROPERTY('Edition') AS SYSNAME)        AS Edition,
    CAST(SERVERPROPERTY('EngineEdition') AS INT)      AS EngineEdition;

Pour info, les principaux numéros de version SQL sont:

  • 8 = SQL 2000
  • 9 = SQL 2005
  • 10 = SQL 2008 (et 10.5 = SQL 2008R2)
  • 11 = SQL 2012
  • 12 = SQL 2014
  • 13 = SQL 2016
  • 14 = SQL 2017

Et tout cela fonctionne aussi pour SQL Azure!

EDITED: Vous pouvez également vérifier le niveau de compatibilité de votre base de données car il pourrait être défini sur une compatibilité inférieure.

IF EXISTS (SELECT * FROM sys.databases WHERE database_id=DB_ID() AND [compatibility_level] < 110)
    RAISERROR('Database compatibility level must be SQL2008R2 or later (110)!', 16, 1)
AndrewD
la source
1

Voici ce que j'ai fait pour trouver la version Voici ce que j'ai fait pour trouver la version: il suffit d'écrire SELECT @@versionet cela vous donnera la version.

Imad Ullah
la source
0
select charindex(  'Express',@@version)

si cette valeur est 0 n'est pas une édition expresse

R.Alonso
la source