我需要一个安全的(即一致的,健壮的)的检测我访问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'

在更多信息: HTTP://blog.devstone的.com /亚伦/缺省,日期,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功能在多个其他的答案已经提到,但还有比检查如果字符串包含“速成版”更好的解决方案:在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安装如果磁盘已满。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top