- - PR -
動的に条件を設定する方法
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-12-16 19:39
お世話になっております。
ただいまSQL ServerでSPを作成しています。 その中でカーソルを使ってデータを取得する処理があるのでが、 カーソルの中の条件の変数がNULLか空文字だった場合は、条件から はずしたいのですができません↓ DECLARE TOGETU_CUR CURSOR LOCAL FAST_FORWARD READ_ONLY FOR SELECT A FROM DATATABLE WHRER B=@B AND C=@C ※「@C」がNULLか空文字の場合は「AND C=@C」を条件からはずしたい すみませんが、どなたかご教授の程よろしくお願いいたします。 | ||||
|
投稿日時: 2006-12-17 00:07
で、どうですか? | ||||
|
投稿日時: 2006-12-17 00:46
という手もあります。 で、あしゅさんのと、上記例とどっちがいいんだろう?って疑問を持ち 対象列(C)にNON UNIEQUEのCLUSTERED INDEXがある場合・ない場合で 実行計画を見てみたところ、 INDEXなしはどちらもコストに差がなく、 INDEXありは上記例の方がコストは低くなりました。 #ただしデータ種類4パターンで、1万行程度でしか測定していない・・・。 何かの参考になれば幸いです。 _________________ 夏椰 @ わんくま同盟 夏椰の庵 Microsoft MVP for Windows Server System - SQL Server ( Jul 2006 - Jun 2008 ) | ||||
|
投稿日時: 2006-12-17 02:35
夏椰さん、あしゅさん返信ありがとうございます。
コード: -------------------------------------------------------------------------------- C = CASE WHEN @C IS NULL THEN C ELSE @C END -------------------------------------------------------------------------------- 理解しました。こんなやり方が・・・。空文字の条件を加えるなら WHEN @C = '' THEN C を加えればいんですね。 非常に助かりました。 コード: -------------------------------------------------------------------------------- C=@C -> ( @C IS NULL OR C=@C ) -------------------------------------------------------------------------------- これはどういう構文になっているのでしょうか。 初心者ですいません。 | ||||
|
投稿日時: 2006-12-18 10:44
@CがNULLの場合はORの左辺が真になるので短絡評価されて 右辺は無視される事になるので、OR全体が真と評価されます。 C=@Cは、@Cが非NULLの場合のみ評価されることになるわけです。 あと、ORはANDよりも優先順位が低いので括弧でくくる必要があります。 CASEと比べたメリットは、式が短くて済むくらいですかね。 [追記] もしかして、構文って「C=@C ->」の事ですか? 単に「C=@C」を「( @C IS NULL OR C=@C )」に変えてって意味です。 [/追記] [ メッセージ編集済み 編集者: あしゅ 編集日時 2006-12-18 10:47 ] |
1