检测的SQL Express从TSQL
-
16-09-2019 - |
题
我需要一个安全的(即一致的,健壮的)的检测我访问SQL服务器是否是SQL Express的方式。我想我宁愿能够从TSQL做到这一点,因为我已经有一个连接字符串,我需要执行TSQL(这应有助于避免与是否被安装/运行WMI问题的所有库,用户有权限来访问注册表等)。
有谁知道的方式做到这一点?
感谢。
PS:基本上,我想这样做,所以我可以监视我的数据库大小对4GB的限制,当我接近它采取行动......但如果我是在一个完整的SQL Server版本上运行,则我不希望代码担心它因为没有(实用)硬编码限制。我可以把一个手动设置我的程序,但它会好得多,如果代码只是自动做了正确的事情,因此需要知道如果服务器是“快报”编辑与否。
解决方案
有多种方法:
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'
其他提示
使用
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
功能在多个其他的答案已经提到,但还有比检查如果字符串包含“速成版”更好的解决方案:在EngineEdition
参数,它返回一个值int
从链接引用:
EngineEdition
安装的SQL Server实例的数据库引擎版本 服务器
1 =个人或桌面引擎(未在SQL Server可用2005和 以后的版本)。
2 =标准(这被返回以用于标准,Web和商业 情报。)
3 =企业(这被返回以用于评估,开发人员,并且两个 企业版。)
4 =快递(这被返回以用于快速,与工具快速和 具有高级服务的表达)
5 = SQL数据库
6 - SQL数据仓库
基础数据类型:的 INT 强>
所以,你可以检查捷版是这样的:
if SERVERPROPERTY('EngineEdition') = 4
begin
select 'Express'
end
else
begin
select 'not Express'
end
在SQL Server Express,会发生什么,如果你不监视大小,但获得到了极限?是否有警告第一?在事件日志的事件?
如果是这样,那么你可能会做的更好,让SQL服务器发出的警告,然后只听他们。同样很可能会申请一个SQL Server Enterprise安装如果磁盘已满。