簡體   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