Quels sont les moyens possibles de déterminer la version déployée de SQL Server?
J'ai essayé de le faire en utilisant le logiciel SQL Server. Je veux le faire en utilisant une instruction SQL de ligne de commande.
Quels sont les moyens possibles de déterminer la version déployée de SQL Server?
J'ai essayé de le faire en utilisant le logiciel SQL Server. Je veux le faire en utilisant une instruction SQL de ligne de commande.
Réponses:
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\ERRORLOG
et ERRORLOG.n
fichiers. 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
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
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 @@ERROR
comme ligne de commande ERRORLEVEL
si> = 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
, ProductVersion
il 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 PARSENAME
fonction 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 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 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:
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)
Utilisez simplement
SELECT @@VERSION
Exemple de sortie
Microsoft SQL Server 2012 - 11.0.2100.60 (X64)
Feb 10 2012 19:39:15
Copyright (c) Microsoft Corporation
Express Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )
Source: Comment vérifier la version du serveur SQL? (Diverses manières expliquées)