- - PR -
SQL Server:DbCommandパラメータの設定による条件分岐
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-08-26 10:28
以下の実現方法で悩んでいます。
=============================================== DbCommandでパラメータ@A,@B,@Cを設定、 sql文をコードから呼び出します。 データ検索としては以下を実現する方向となっています。 ----------------------------------------------- select 列1,列2 from テーブル1 where( (テーブル1.列3= 'aaa' AND テーブル1.列4 = @A) ・・・条件1 AND テーブル1.列5 = @B) ・・・条件2 OR (テーブル1.列3= 'bbb' AND テーブル1.列6 = @C) ・・・条件3 ) ----------------------------------------------- (※テーブルの全てのカラムはnull許可しないものとなっています) ■実現したいこと @A・@B・@Cのいずれかが' '(ブランク)である場合、 該当する各条件文を除いて検索するSQL文を 思考錯誤しています。 例1:@Bがブランクの場合 where( (テーブル1.列3= 'aaa' AND テーブル1.列4 = @A) OR (テーブル1.列3= 'bbb' AND テーブル1.列6 = @C) ) 例2:@A・@Bがブランクの場合 where( (テーブル1.列3= 'bbb' AND テーブル1.列6 = @C) ) =============================================== SQL(DB処理)も始めて間もなく、検討そのものも苦戦しています。 何かよい方法は無いでしょうか。 宜しくお願いします。 | ||||
|
投稿日時: 2007-08-26 17:55
CASE WHENで検索しる。
_________________ 質問する前にググレカス | ||||
|
投稿日時: 2007-08-26 19:23
NAL-6295です。
(@a is null or @a = '' or 列4 = @a) といった感じにするとよいと思いますが、 クエリを組み立てる段階で排除できるなら その方がよいと思います。 | ||||
|
投稿日時: 2007-08-26 22:46
返信ありがとうございます。
ぶさいくろうさん case・whenでは検討してみました。 でもいい組み立てが見つからなくて困っていたんです。 NAL-6295さん >(@a is null or @a = '' or 列4 = @a) >といった感じにするとよいと思いますが、 >クエリを組み立てる段階で排除できるなら >その方がよいと思います。 ありがとうございます。 回答を参考に再検討します。 | ||||
|
投稿日時: 2007-08-26 23:44
>ぶさいくろうさん
回答頂いたこともあり、追記させて下さい。 case whenで調べて、以下を考えたのですが。。。 ------------------------------------------------- where( (テーブル1.列3= 'aaa' AND (CASE WHEN @A <> ' ' THEN テーブル1.列4 = @A ELSE テーブル1.列4 <> NULL END) AND (CASE WHEN @B <> ' ' THEN テーブル1.列5 = @B ELSE テーブル1.列5 <> NULL END) )OR (テーブル1.列3= 'bbb' AND (CASE WHEN @C <> ' ' THEN テーブル1.列6 = @C ELSE テーブル1.列6 <> NULL END) ) ------------------------------------------------- 上記だと、 テーブル1.列3= 'aaa' かつ@A <> ' 'のとき、 テーブル1.列4の値が@Aとなり、 実現したいことでないと、方法を再検討という状況です。 | ||||
|
投稿日時: 2007-08-27 01:01
CASE WHENはネストできるけどね。
何で実現できないんだろ。 | ||||
|
投稿日時: 2007-08-27 07:34
空白文字と空文字列は違う
nullは比較できない ってことでは? _________________ | ||||
|
投稿日時: 2007-08-27 18:06
|
1