- PR -

WHERE句内での条件分岐は可能ですが?

1
投稿者投稿内容
セルカー
ベテラン
会議室デビュー日: 2004/04/08
投稿数: 70
投稿日時: 2007-11-28 20:13
SQL Server 2000で開発しております。

今までプログラムソース内(C#)でベタ書きで書いていたクエリ文を、ストアドにしようとしているのですが、ソース内で作成されるクエリは、条件によって、異なるWHERE句が作成されるようになっております。

分岐される中身としては


クエリ = SELECT * FROM hogehoge

switch(i)
case 0:
クエリ += [列A] IN (1,2,3,4);
case 1:
クエリ += [列A] IN (2,3,4,5);
   ・
   ・
   ・

といった具合に、INの中身だけが変更になるクエリ文なのですが、これと同じような処理をストアドの中で行うことは可能でしょうか?
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2007-11-28 22:14
コード:
where
    (i = 1 and a in(1,2,3)) or
    (i = 2 and a in(2,3,4)) or
    (i = 3 and a in(3,4,5))


で、大丈夫ですよ。ストアドでも通常のSQLでも同じです。
セルカー
ベテラン
会議室デビュー日: 2004/04/08
投稿数: 70
投稿日時: 2007-11-29 14:08
出来ました!

列名以外のものをWHERE句で使うという発想がありませんでした。
勉強になりました、ありがとうございますm(_ _)m
ラララ
ベテラン
会議室デビュー日: 2004/02/04
投稿数: 66
投稿日時: 2007-12-02 00:56
SQLの実行効率を考えると、今回の場合、動的SQL(sp_executesql)で
実装するのが適しているように思えます。
他にも応用が効きますしね・・・。
セルカー
ベテラン
会議室デビュー日: 2004/04/08
投稿数: 70
投稿日時: 2007-12-04 09:08
条件句毎のストアドを用意して、それをプログラム内で分岐させる、ということですか?

うーん、取り扱うデータ量もそれほど多くなく、また、納品時の漏れを少なくする為に、少しでもモジュールは減らしたいと考えてます。

でも、大きなデータ量を扱うような場合にはぜひ試してみたいと思います。

ありがとうございますm(_ _)m
ラララ
ベテラン
会議室デビュー日: 2004/02/04
投稿数: 66
投稿日時: 2007-12-06 22:55
>条件句毎のストアドを用意して、それをプログラム内で分岐させる、ということですか?

違います。

ストアドの中でSQL文の文字列を作り、そのストアド内で
作成したSQL文の文字列を呼び出します。
このSQL文が動的なので、sp_executesqlプロシージャに
よりSQLを実行する必要があります。

なので、作成されるストアドは1つです。
1

スキルアップ/キャリアアップ(JOB@IT)