繁体   English   中英

T-SQL:在大小写块中执行命令

[英]T-SQL: Execute command in case block

有没有可能在T-SQL中执行类似的事情?

CASE @@VERSION 
WHEN 'SQL Server 2005'
THEN Command_A
ELSE Command_B
END

如果服务器版本为2005,则此case块应选择Command_A。否则请选择Command_B。

实际上,情况是SELECT的“子命令”,您可以通过以下方式实现所需的功能:

declare @s varchar(255)
select @s = case @@VERSION 
when 'SQL Server 2005'
THEN 'command 1'
ELSE 'command 2'
END
exec (@s)

这样应该可以正常工作,如下所示:

if (@@version like '%SQL Server 2014%') select '2014'
else select 'Other'

请参见SQL Fiddle

但是,如果要运行的版本不支持该代码,则应创建要调用的单独过程,或使用动态SQL。

您可以为此使用动态SQL

DECLARE @dynamicSql VARCHAR(max);
CASE @@VERSION
            WHEN 'SQL Server 2005'
                THEN @dynamicSql = 'Command_A'
            ELSE @dynamicSql = 'Command_B'
            END

    EXEC (@dynamicSql)

您可以使用此CASE获取sql-server版本:

SELECT CASE SUBSTRING(CAST(SERVERPROPERTY('productversion')AS nvarchar(128)), 1, CHARINDEX('.', CAST(SERVERPROPERTY('productversion')AS nvarchar(128))) - 1)
       WHEN 7 THEN 'SQL Server 7'
       WHEN 8 THEN 'SQL Server 2000'
       WHEN 9 THEN 'SQL Server 2005'
       WHEN 10 THEN 'SQL Server 2008/2008 R2'
       WHEN 11 THEN 'SQL Server 2012'
       WHEN 12 THEN 'SQL Server 2014'  
       ELSE 'Unsupported' END AS DB_Version

然后,您只需要根据结果执行动态sql。

演示版

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM