Определить Sql Express из TSQL - PullRequest
4 голосов
/ 16 июля 2009

Мне нужен безопасный (то есть непротиворечивый, надежный) способ определения того, является ли сервер SQL, к которому я обращаюсь, Sql Express. Я думаю, что предпочел бы иметь возможность сделать это из TSQL, поскольку у меня уже есть строка подключения и все библиотеки, необходимые для выполнения TSQL (это должно помочь избежать проблем с тем, установлен ли WMI или нет, пользователь имеет разрешения на доступ к реестру и т. д.).

Кто-нибудь знает способ сделать это?

Спасибо.

PS: По сути, я хочу сделать это, чтобы я мог отслеживать размер моей базы данных по сравнению с лимитом в 4 ГБ и предпринимать какие-либо действия при приближении к нему ... но если я работаю на полной версии Sql Server, тогда я не хочу код беспокоиться об этом, так как нет (практического) жесткого кодированного ограничения. Я мог бы установить ручную настройку в моей программе, но было бы гораздо приятнее, если бы код выполнял все правильно, поэтому возникает необходимость узнать, является ли сервер «Экспресс-выпуском» или нет.

Ответы [ 6 ]

7 голосов
/ 16 июля 2009

Используйте

SELECT SERVERPROPERTY('EditionID')

или

SELECT SERVERPROPERTY('Edition')

для определения, какая версия SQLServer запущена.

http://msdn.microsoft.com/en-us/library/ms174396.aspx

5 голосов
/ 16 июля 2009

Это вернет 0, если это не так, и что-то ненулевое (126 здесь), если это:

select charindex('Express Edition',@@version)

Пример в логическом контексте:

if (select charindex('Express Edition',@@version)) > 0
    begin
        print 'Express edition!'
    end
else
    begin
        print 'Not Express edition!'
    end
3 голосов
/ 16 июля 2009

Есть несколько способов:

EXEC sp_server_info 2

Или

SELECT @@version

Или

SELECT serverproperty('ProductVersion')

Вы также можете сделать это:

DECLARE @ver nvarchar(128)
SET @ver = CAST(serverproperty('ProductVersion') AS nvarchar)
SET @ver = SUBSTRING(@ver, 1, CHARINDEX('.', @ver) - 1)
IF ( @ver = '8' )
   SELECT 'SQL Server 2000'
ELSE IF ( @ver = '9' )
   SELECT 'SQL Server 2005'
ELSE
   SELECT 'Unsupported SQL Server Version'

Более подробная информация по адресу: http://blog.devstone.com/aaron/default,date,2006-12-15.aspx

3 голосов
/ 16 июля 2009

Вы можете использовать SERVERPROPERTY('Edition'), который вернет "Express Edition"

1 голос
/ 25 ноября 2017

Функция SERVERPROPERTY уже упоминалась во многих других ответах, но есть лучшее решение, чем проверка, содержит ли строка «Express Edition»: аргумент EngineEdition, который возвращает int значение.

Цитата из ссылки:

EngineEdition

Редакция Database Engine экземпляра SQL Server, установленного на сервер.

1 = Персональный или настольный движок (Недоступно в SQL Server 2005 и более поздние версии.)

2 = Стандарт (возвращается для Стандартных, Веб и Бизнес Интеллект.)

3 = Enterprise (возвращается для Evaluation, Developer и обоим Корпоративные издания.)

4 = Экспресс (Возвращается для Экспресс, Экспресс с инструментами и Экспресс с расширенными услугами)

5 = База данных SQL

6 - Хранилище данных SQL

Базовый тип данных: int

Таким образом, вы можете проверить наличие Express Edition следующим образом:

if SERVERPROPERTY('EngineEdition') = 4
    begin
        select 'Express'
    end
else
    begin
        select 'not Express'
    end
0 голосов
/ 16 июля 2009

Что происходит в SQL Server Express, если вы не следите за размером, а достигли предела? Есть ли предупреждения в первую очередь? События в журнале событий?

Если это так, то вам лучше разрешить SQL Server выдавать предупреждения, а затем просто прослушивать их. То же самое можно применить к установке SQL Server Enterprise, если диск заполнен.

...