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