我需要一种安全(即一致,健壮)的方法来检测我正在访问的sql server是否是Sql Express。我想我更愿意从TSQL中做到这一点,因为我已经有一个连接字符串和我需要执行TSQL的所有库(这应该有助于避免WMI是否安装/运行的问题,用户有访问注册表的权限等。)
有谁知道这样做的方法?
感谢。
PS:基本上我想这样做,所以我可以监控我的数据库大小与4gb的限制,并在我接近它时采取行动...但如果我在一个完整的Sql Server版本上运行,那么我不想要代码担心它,因为没有(实际)硬编码限制。我可以在我的程序中进行手动设置,但如果代码自动执行正确的操作会更好,因此需要知道服务器是否是“Express”版本。答案 0 :(得分:7)
使用
SELECT SERVERPROPERTY('EditionID')
或
SELECT SERVERPROPERTY('Edition')
检测正在运行的SQLServer版本。
答案 1 :(得分:5)
如果不是,则返回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
答案 2 :(得分:3)
您可以使用将返回“Express Edition”的SERVERPROPERTY('Edition')
答案 3 :(得分:3)
有很多方法:
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
答案 4 :(得分:1)
SERVERPROPERTY
function已在多个其他答案中提及,但有一个比检查字符串是否包含“Express Edition”更好的解决方案:EngineEdition
参数,返回int
值
从链接引用:
EngineEdition
安装在SQL Server实例上的数据库引擎版本 服务器
1 =个人或桌面引擎(在SQL Server 2005和 以后的版本。)
2 =标准(此标准,Web和Business返回 情报。)
3 = Enterprise(评估,开发人员和两者都返回此项 企业版。)
4 = Express(这是Express,Express返回的工具和 快递与高级服务)
5 = SQL数据库
6 - SQL数据仓库
基础数据类型: int
所以你可以像这样检查Express Edition:
if SERVERPROPERTY('EngineEdition') = 4
begin
select 'Express'
end
else
begin
select 'not Express'
end
答案 5 :(得分:0)
如果您不监控大小,但达到限制,SQL Server Express会发生什么?先警告了吗?事件日志中的事件?
如果是这样,那么您可能最好允许SQL Server发出警告,然后只是听取它们。如果磁盘已满,则同样适用于SQL Server Enterprise安装。