Comment déterminer SQL Server 2008 ou supérieur
-
14-11-2019 - |
Question
J'ai besoin de déterminer par programme si la base de données prend en charge le type de données de géographie et les index spatiaux. Ces fonctionnalités ont été introduites en 2008. Je dois également déterminer si CLR est activée car ces fonctionnalités reposent sur elle. Quelle est la façon la plus fiable de le faire?
La solution
SQL Server 2008 est 10.x
Vous pouvez utiliser Serverproperty en SQL et requête SYS.Configurations
SELECT
PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS varchar(20)), 3) AS MajorVersion,
value_in_use
FROM
sys.configurations
WHERE
name = 'clr enabled';
Edit: casting ajouté
Autres conseils
analyser ce qui suit:
select @@VERSION
SELECT * FROM sys.configurations WHERE name = 'clr enabled'
SELECT compatibility_level from sys.databases where name=db_name()
Comme:
select
CASE
WHEN LEFT(@@VERSION,25)='Microsoft SQL Server 2008' THEN 'Yes'
ELSE 'NO'
END AS OnSQLServer2008
,CASE value
WHEN 0 THEN 'No'
ELSE 'Yes'
END AS [clr_enabled]
,(SELECT CASE compatibility_level WHEN 100 then 'Yes' ELSE 'No' END from sys.databases where name=db_name()) AS SQLServer2008CompatibilityMode
FROM sys.configurations
WHERE name = 'clr enabled'
production:
OnSQLServer2008 clr_enabled SQLServer2008CompatibilityMode
--------------- ----------- ------------------------------
Yes No No
(1 row(s) affected)
Vous pouvez utiliser SELECT @@VERSION
qui renvoie une chaîne assez verbeuse.
Est plus facile de regarder le niveau de compatibilité DB en utilisant
select compatibility_level from sys.databases where name=db_name()
Cela renvoie un numérique. Les valeurs fréquentes sont telles que:
80 = SQL Server 2000
90 = SQL Server 2005
100 = SQL Server 2008
Cela a l'avantage supplémentaire de vérifier que la base de données sur le serveur est au niveau requis, et pas seulement que le serveur lui-même exécutant une version système particulière.
Utilisez la requête mentionnée ci-dessous
SELECT
SERVERPROPERTY('ProductVersion') AS ProductVersion,
SERVERPROPERTY('ProductLevel') AS ProductLevel,
SERVERPROPERTY('Edition') AS Edition,
SERVERPROPERTY('EngineEdition') AS EngineEdition;
Pour que les versions mentionnées ci-dessous le découvrent.