web-dev-qa-db-fra.com

Comment vérifier la version de SQL Server

Quels sont les moyens possibles pour déterminer la version de SQL Server déployée?

J'ai essayé de le faire en utilisant le logiciel SQL Server. Je veux le faire en utilisant une instruction SQL en ligne de commande.

96
Yameen Bashir

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 résultat 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 de SQL Server Management Studio. Une fois l’Explorateur connecté, il affiche 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 les fichiers Program Files\Microsoft SQL Server\MSSQL.n\MSSQL\LOG\ERRORLOG et ERRORLOG.n. Les entrées peuvent ressembler à ceci:

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 constater, cette entrée fournit toutes les informations nécessaires sur le produit, telles que sa version, son niveau, la version 64 bits ou 32 bits, l'édition de SQL Server et la version du système d'exploitation sur laquelle 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

177
Imran
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
6
select charindex(  'Express',@@version)

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

0
R.Alonso

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

Ceci utilise SQLCMD (fourni avec SQL Server) pour se connecter à l'instance de serveur local à l'aide de Windows auth, génère une erreur en cas d'échec de la vérification de version et renvoie le @@ERROR sous la ligne de commande ERRORLEVEL si> = 16 ( et la deuxième ligne passe à l'étiquette :ExitFail si la ERRORLEVEL susmentionnée est> = 1).

Watchas, Gotchas & More Info

Pour SQL 2000+, vous pouvez utiliser le SERVERPROPERTY pour déterminer un grand nombre de ces informations.

Bien que SQL 2008+ prenne en charge les propriétés ProductMajorVersion & ProductMinorVersion, ProductVersion existe depuis 2000 (en se rappelant que si une propriété n'est pas prise en charge, la fonction renvoie NULL).

Si les versions précédentes vous intéressent, vous pouvez utiliser la fonction PARSENAME pour scinder la ProductVersion (les "parties" sont numérotées de droite à gauche, c.-à-d. PARSENAME('a.b.c', 1) renvoie c).

N'oubliez pas non plus que PARSENAME('a.b.c', 4) renvoie NULL, car SQL 2005 et versions antérieures utilisaient uniquement 3 composants 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;

(la PARSENAME(...,0) 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);

Ceci est beaucoup plus simple si vous ne vous intéressez qu'à SQL 2008+ car SERVERPROPERTY('ProductMajorVersion') renvoie NULL pour 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 ProductLevel et Edition (ou EngineEdition) pour déterminer RTM/SPn/CTPn et Dev/Std/Ent/etc. respectivement.

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 les suivants:

  • 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 vouloir vérifier votre niveau de compatibilité de la base de données car il pourrait être réglé sur une compatibilité plus faible.

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)
0
AndrewD

 Here is what i have done to find the version  Voici ce que j'ai fait pour trouver la version: écrivez simplement SELECT @@version et il vous donnera la version.

0
Imad Ullah