Обнаружение Sql Express Из TSQL
-
16-09-2019 - |
Вопрос
Мне нужен безопасный (т. е. согласованный, надежный) способ определения того, является ли 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 работает.
Это вернет 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, если диск заполняется.