Вопрос

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

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

Спасибо.

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

Это было полезно?

Решение

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

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

Другие советы

Использовать

SELECT SERVERPROPERTY('EditionID')

или

SELECT SERVERPROPERTY('Edition')

чтобы определить, какая версия SQLServer работает.

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

Это вернет 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

Вы можете использовать SERVERPROPERTY('Edition') который вернет «Экспресс-издание»

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

Цитата по ссылке:

Разработка двигателя

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

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

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

3 = Enterprise (Это значение возвращается для оценки, разработчика и обоих выпусков Enterprise.)

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

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

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

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

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

if SERVERPROPERTY('EngineEdition') = 4
    begin
        select 'Express'
    end
else
    begin
        select 'not Express'
    end

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top