Как определить SQL Server 2008 или выше

Мне нужно программно определить, поддерживает ли база данных тип данных Geography и пространственные индексы. Эти функции были представлены в 2008 году. Мне также нужно определить, включен ли CLR, поскольку эти функции зависят от него. Какой самый надежный способ сделать это?

4 ответа

Решение

SQL Server 2008 является 10.x

Вы можете использовать SERVERPROPERTY в SQL и запрашивать sys.configurations

SELECT
   PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS varchar(20)), 3) AS MajorVersion, 
   value_in_use
FROM 
   sys.configurations
WHERE
   name = 'clr enabled';

Редактировать: добавлено CAST

Разобрать следующее:

select @@VERSION

SELECT * FROM sys.configurations WHERE name = 'clr enabled'

SELECT compatibility_level from sys.databases where name=db_name()

лайк:

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'

выход:

OnSQLServer2008 clr_enabled SQLServer2008CompatibilityMode
--------------- ----------- ------------------------------
Yes             No          No

(1 row(s) affected)

Ты можешь использовать SELECT @@VERSION который возвращает довольно многословную строку.

Проще посмотреть на уровень совместимости БД, используя

select compatibility_level from sys.databases where name=db_name()

Это возвращает число. Частые значения, такие как:

80 = SQL Server 2000

90 = SQL Server 2005

100 = SQL Server 2008

Это дает дополнительное преимущество проверки того, что база данных на сервере находится на требуемом уровне, а не только то, что на самом сервере работает конкретная версия системы.

Используйте приведенный ниже запрос

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

Для ниже упомянутых версий, чтобы узнать.

Другие вопросы по тегам