2012-04-13 76 views
8

我想根據用戶輸入選擇要執行的存儲過程。喜歡的東西 -我們可以使用CASE和EXEC

EXEC 
CASE @InputParam 
    WHEN 'XML' THEN GetXMLData @ID, 'y' 
    WHEN 'TABLE' THEN GetTableData @ID, 'y' 
END 

可以這樣用CASE完成,或者我應該考慮使用If結構?

+2

'CASE'被用於查詢中的內聯評估。你想要'IF',因爲它是一個流程控制結構。 – JNK 2012-04-13 15:35:32

回答

8

您要使用的IF結構在這裏:

IF @InputParam = 'XML' 
    EXEC GetXMLData @ID, 'y' 
IF @InputParam = 'TABLE' 
    EXEC GetTableData @ID, 'y' 
1

你可以這樣說:

IF @InputParam = 'XML' 
BEGIN 
    EXEC GetXMLData @ID, 'y' 
END 

IF @InputParam = 'TABLE' 
BEGIN 
    EXEC GetTableData @ID, 'y' 
END 
+0

我想你的意思是在這裏使用'IF'而不是'CASE' ...這是無效的語法。 – JNK 2012-04-13 15:33:41

+0

是的@JNK是對的,我早些時候嘗試了上面的代碼,並沒有奏效。 – neuDev33 2012-04-13 15:39:06

+0

@ neuDev33好的,你可以使用'IF'。我正在使用Sybase-ASE語法:P – 2012-04-13 15:58:26

2

在這種情況下,我認爲,即使如果SQL Server允許的是,一個IF會更清晰。

IF @InputParam = 'XML' 
BEGIN 
    exec GetXMLData @ID, 'y' 
END 
ELSE IF @InputParam = 'TABLE' 
BEGIN 
    exec GetTableData @ID, 'y' 
END 
0

你可以使用CASE,但你必須使用EXEC(CMD):

DECLARE 
@cmd VARCHAR(200) 
, @InputParam VARCHAR(5) ='TABLE' 
, @ID INT =1 

SELECT @cmd = (CASE @InputParam 
WHEN 'XML' THEN 'GetXMLData ' 
     +CONVERT(VARCHAR,@ID)+', '+CHAR(39)+'y'+CHAR(39) 
WHEN 'TABLE' THEN 'GetTableData ' 
     +CONVERT(VARCHAR,@ID)+', '+CHAR(39)+'y'+CHAR(39) 
END) 
EXEC(@cmd) 
相關問題