2012-04-13 9 views
8

ユーザー入力に基づいて実行するストアドプロシージャを選択します。ような何か -EXECでCASEを使用することができます

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

これはCASEで行うことができますか私はIf構文を使用して検討すべき?

+2

'CASE'ですがクエリ内のインライン評価に使用されます。それはフロー制御構造なので、 'IF'が必要です。 – JNK

答えて

8

あなたがここにIF構文を使用する:あなたはCASEを使用することができ

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

あなたはこのようにそれを行うことができます。私は、SQL Serverは、IFがより明確になることを許可された場合でもと思い、このシナリオでは

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

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

ここでは 'CASE'の代わりに' IF'を使うことを意味すると思います...これは無効な構文です。 – JNK

+0

はい@JNKが正しいです、私は以前のコードを試してみましたが、うまくいきませんでした。 – neuDev33

+0

@ neuDev33これで 'IF'を使うことができます。私はSybase-ASE構文を使用していました:P –

2

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

ていますが、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) 
関連する問題