- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:selectの行を共通に使いたい)
ストアド・プロシジャーでselectの行を共通に使いたい
このQ&Aのポイント
- ストアド・プロシジャー内で、入力引数に応じて異なる条件でselect文を実行したい場合、共通のselect文を作成する方法を教えてください。
- 質問者はストアド・プロシジャー内のif文を使用して、入力引数に応じて条件分岐していますが、その方法ではエラーが発生します。共通処理としてselect文を使いたい場合、どのように書けば良いでしょうか?
- 具体的には、select文の前に共通の部分があるため、それを取り除いてselect文自体を共通化したいという要望です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
DECLARE @i int としておいて、 if( @INPUT_TYPE = 1 ) BEGIN @i=100 END ELSE IF( @INPUT_TYPE = 2 ) BEGIN @i=200 END として、 SELECT CLM1,CLM2,CLM3 FROM tableAAA WHERE CLM1=@i とすればよいのではないでしょうか。
その他の回答 (1)
- space_needle
- ベストアンサー率48% (174/362)
回答No.2
解決したようで何よりです。 一応、今後のために動的SQLの作成方法をリンクしておきます。 sp_executesqlストアドプロシージャを使用します。
お礼
以下の様に対処して自己解決しました。 入力引数 @INPUT_TYPE int select CLM1,CLM2,CLM3 from tableAAA where (@INPUT_TYPE = 1) or (@INPUT_TYPE = 2 and CLM1 = 100) or (@INPUT_TYPE = 3 and CLM1 != 100) ありがとうございました。
補足
早速の回答をしていただきまして、本当にありがとうございます。 なるほど、その通りです。 ただ、次のような場合にどうすればいいかわかりません。条件が以下の3種の場合です。 入力引数 @INPUT_TYPE int if( @INPUT_TYPE = 1 ) begin select CLM1,CLM2,CLM3 from tableAAA /* 条件なし */ end else if( @INPUT_TYPE = 2 ) begin select CLM1,CLM2,CLM3 from tableAAA where CLM1 = 100 end else if( @INPUT_TYPE = 3 ) begin select CLM1,CLM2,CLM3 from tableAAA where CLM1 != 100 end これを1回のselectで実行する方法はあるでしょうか? お力をお貸しください。よろしく御願いします。