5

我需要一种安全(即一致、健壮)的方法来检测我正在访问的 sql 服务器是否是 Sql Express。我想我更希望能够从 TSQL 执行此操作,因为我已经有一个连接字符串和执行 TSQL 所需的所有库(这应该有助于避免 WMI 是否安装/运行的问题,用户有访问注册表等的权限)。

有谁知道这样做的方法?

谢谢。

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

4

6 回答 6

7

利用

SELECT SERVERPROPERTY('EditionID')

或者

SELECT SERVERPROPERTY('Edition')

检测正在运行的 SQLServer 版本。

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

于 2009-07-16T15:35:49.570 回答
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
于 2009-07-16T15:31:55.973 回答
4

有很多方法:

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

于 2009-07-16T15:36:00.723 回答
4

SERVERPROPERTY函数 已在多个其他答案中提到,但有一个比检查字符串是否包含“Express Edition”更好的解决方案:EngineEdition返回int值的参数。

引用链接:

引擎版

服务器上安装的 SQL Server 实例的数据库引擎版本。

1 = 个人或桌面引擎(在 SQL Server 2005 和更高版本中不可用。)

2 = 标准(为标准、Web 和商业智能返回。)

3 = 企业版(评估版、开发版和企业版均返回此值。)

4 = Express(这为 Express、Express with Tools 和 Express with Advanced Services 返回)

5 = SQL 数据库

6 - SQL 数据仓库

基本数据类型:int

因此,您可以像这样检查 Express Edition:

if SERVERPROPERTY('EngineEdition') = 4
    begin
        select 'Express'
    end
else
    begin
        select 'not Express'
    end
于 2017-11-24T22:22:38.690 回答
3

您可以使用SERVERPROPERTY('Edition')which 将返回“Express Edition”

于 2009-07-16T15:32:52.760 回答
0

如果您不监视大小,但达到了极限,SQL Server Express 会发生什么?首先有警告吗?事件日志中的事件?

如果是这样,那么您最好让 SQL Server 发出警告,然后只听它们。如果磁盘已满,这同样适用于 SQL Server Enterprise 安装。

于 2009-07-16T17:00:26.403 回答