いちばん失敗した人決定戦

多くの選択項目を処理(SELECT)するストアド

とあるデータ検索において、選択項目が10項目以上あり各項目の値をパラメータとして受取り、
該当データを返すストアドを検討しています。

項目が省略された場合は Null値がパラメータとして入ってきて、その項目は条件から除外します。
(全ての項目が省略されたら、全てのレコードが返される)下記の様な方法を考えています・・・

-----------------------------------------------------------------

if @para1 is null
 if @para2 is null
  if @para3 is null
   select * from TBL
  else
   select * from TBL where koumoku3 = @para3
 else
  if @para3 is null
   select * from TBL where koumoku2 = @para2
  else
   select * from TBL where koumoku2 = @para2 and koumoku3 = @para3
else
 if @para2 is null
  if @para3 is null
   select * from TBL where koumoku1 = @para1
  else
   select * from TBL where koumoku1 = @para1 and koumoku3 = @para3
 else
  if @para3 is null
   select * from TBL where koumoku1 = @para1 and koumoku2 = @para2
  else
   select * from TBL where koumoku1 = @para1 and koumoku2 = @para2 and koumoku3 = @para3

------------------------------------------------------
三つでも面倒なのに10項目以上では考えられません。
こんな時どのように作り込めばいいのでしょうか

動的ストアドにして where文自体を編集した物を渡す事も考えましたが、
エクセル出力時のパラメーター長の制限(?)で断念しました。

省略されなかった項目だけでデータを選択したいような事は多々あると思うのですが、
そんな時のオーソドックスは方法はどんな方法なんでしょうか?

よろしくお願いします。

A 回答 (2件)

私の場合は、以下のようにCASEを使って処理しています。



select * from TBL where
case when @para1 is not null then @para1 else koumoku1 end = koumoku1
and case when @para2 is not null then @para2 else koumoku2 end = koumoku2
and case when @para3 is not null then @para3 else koumoku3 end = koumoku3

簡潔になると思いますが、如何でしょうか?
    • good
    • 0
この回答へのお礼

ありがとうございました。

解決しました。

お礼日時:2010/04/22 23:58

こんばんは



>エクセル出力時のパラメーター長の制限(?)で断念しました。
これがよくわかりませんが・・・、
SQL Serverなので、「sp_executesql」でやっちゃえばいいかと思います。
    • good
    • 0
この回答へのお礼

ありがとうございました。

書き忘れたのですが、ACCESSのVBAからストアドを起動するのですが、
ストアドを直接エクセルに出力するとパラメータが150文字前後を境に
こけてしまいます。 これを文字数制限と表現しました。

お礼日時:2010/04/22 23:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!