[英]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.