从TSQL检测Sql Express

时间:2009-07-16 15:23:45

标签: sql-server tsql sql-server-express detect

我需要一种安全(即一致,健壮)的方法来检测我正在访问的sql server是否是Sql Express。我想我更愿意从TSQL中做到这一点,因为我已经有一个连接字符串和我需要执行TSQL的所有库(这应该有助于避免WMI是否安装/运行的问题,用户有访问注册表的权限等。)

有谁知道这样做的方法?

感谢。

PS:基本上我想这样做,所以我可以监控我的数据库大小与4gb的限制,并在我接近它时采取行动...但如果我在一个完整的Sql Server版本上运行,那么我不想要代码担心它,因为没有(实际)硬编码限制。我可以在我的程序中进行手动设置,但如果代码自动执行正确的操作会更好,因此需要知道服务器是否是“Express”版本。

6 个答案:

答案 0 :(得分:7)

使用

SELECT SERVERPROPERTY('EditionID')

SELECT SERVERPROPERTY('Edition')

检测正在运行的SQLServer版本。

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

答案 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安装。