行为依赖于sql server edition

时间:2014-05-07 11:44:46

标签: sql sql-server tsql sql-server-2012

我正在尝试准备将定期触发的SQL脚本,并且在MS SQL Server Enterprise版本上的行为与其他版本不同。 我知道我可以通过以下方式检查版本:

SELECT SERVERPROPERTY('edition')

所以我认为它可以像这样工作:

IF EXISTS 
    (SELECT SERVERPROPERTY('edition') as edition WHERE edition LIKE '%Enterprise')
BEGIN
    print 'script for enterprise edition'
END
ELSE
BEGIN
    print 'script for other verisons'
END

但我无法在WHERE子句中引用字段别名并收到错误&#34;无效的列名&#39; edition&#39;。&#34;,所以我尝试使用CTE:< / p>

WITH Test AS (SELECT SERVERPROPERTY('edition') as edition)
SELECT * FROM Test WHERE edition LIKE '%Enterprise'

但它也没有工作(&#34;参数数据类型sql_variant对于类似函数的参数1无效。&#34;)

您是否有任何建议如何实现依赖于版本的行为?

2 个答案:

答案 0 :(得分:2)

这是支票:

if (cast(serverproperty('edition') as varchar) like '%enterprise%')
    print 'script for enterprise edition'
else
    print 'script for other verisons'

答案 1 :(得分:0)

%将SERVERPROPERTY的结果存储到变量:

DECLARE @Edition SYSNAME
SELECT @Edition = CAST(SERVERPROPERTY('Edition') AS SYSNAME)

IF (@Edition LIKE '%Enterprise%')
BEGIN
    print 'script for enterprise edition'
END
ELSE
BEGIN
    print 'script for other verisons'
END

编辑:根据@marc_s的评论更新