代码之家  ›  专栏  ›  技术社区  ›  Yort

从TSQL检测SQL Express

  •  4
  • Yort  · 技术社区  · 15 年前

    我需要一种安全的(即一致的、健壮的)方法来检测我访问的SQL服务器是否是SQL Express。我想我更愿意从tsql中完成这项工作,因为我已经有了一个连接字符串和执行tsql所需的所有库(这有助于避免安装/运行wmi、用户有权访问注册表等问题)。

    有人知道怎么做吗?

    谢谢。

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

    6 回复  |  直到 7 年前
        1
  •  3
  •   Lukasz    15 年前

    有多种方法:

    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

        2
  •  7
  •   devio    15 年前

    使用

    SELECT SERVERPROPERTY('EditionID')
    

    SELECT SERVERPROPERTY('Edition')
    

    以检测正在运行的SQLServer版本。

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

        3
  •  5
  •   Jeremy Smyth    15 年前

    如果不是,则返回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
    
        4
  •  3
  •   AdaTheDev    15 年前

    你可以使用 SERVERPROPERTY('Edition') 将返回“速成版”

        5
  •  1
  •   Christian Specht    7 年前

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

    从链接引用:

    工程版

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

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

    2=标准(返回标准、Web和业务 智力。

    3=企业(返回供评估、开发人员和两者都返回) 企业版。)

    4=Express(这是为Express返回的,带有工具和 提供高级服务的Express)

    5=SQL数据库

    6-SQL数据仓库

    基本数据类型: int

    所以你可以检查一下像这样的速成版:

    if SERVERPROPERTY('EngineEdition') = 4
        begin
            select 'Express'
        end
    else
        begin
            select 'not Express'
        end
    
        6
  •  0
  •   John Saunders Andrey Morozov    15 年前

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

    如果是这样,那么您最好允许SQL Server发出警告,然后只听取它们。如果磁盘已满,则同样适用于SQL Server企业版安装。