• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:selectの行を共通に使いたい)

ストアド・プロシジャーでselectの行を共通に使いたい

このQ&Aのポイント
  • ストアド・プロシジャー内で、入力引数に応じて異なる条件でselect文を実行したい場合、共通のselect文を作成する方法を教えてください。
  • 質問者はストアド・プロシジャー内のif文を使用して、入力引数に応じて条件分岐していますが、その方法ではエラーが発生します。共通処理としてselect文を使いたい場合、どのように書けば良いでしょうか?
  • 具体的には、select文の前に共通の部分があるため、それを取り除いてselect文自体を共通化したいという要望です。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

  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 とすればよいのではないでしょうか。

bunarin
質問者

お礼

以下の様に対処して自己解決しました。   入力引数 @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) ありがとうございました。

bunarin
質問者

補足

早速の回答をしていただきまして、本当にありがとうございます。 なるほど、その通りです。 ただ、次のような場合にどうすればいいかわかりません。条件が以下の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で実行する方法はあるでしょうか? お力をお貸しください。よろしく御願いします。

その他の回答 (1)

回答No.2

解決したようで何よりです。 一応、今後のために動的SQLの作成方法をリンクしておきます。 sp_executesqlストアドプロシージャを使用します。

参考URL:
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/tsqlref/ts_sp_ea-ez_2h7w.asp

関連するQ&A