- PR -

複数の検索フォームとGridView

投稿者投稿内容
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2006-08-02 01:36
引用:
SELECT StoreName, CityName
FROM Store
WHERE (CityName = ISNULL(@CityName, CityName)) AND (StoreName LIKE '%')

「NULL = NULL」は真(true)にはならないようです。
金太郎の列はCityName(null)と@CityName(これもnull)を比較しますからね

( (@CityName is null and CityName is null ) OR CityName = ISNULL(@CityName, CityName ) )
とかするしかないのかなぁ。

[追記]
NULLIF (@CityName, CityName) IS NULL
これでいけるのかな。使うならNULLIFの仕様をちゃんと知ってからですが。

[追記2]
そ、そうか。↑こんなことしなくても、↓それでいいですね。。

[ メッセージ編集済み 編集者: べる 編集日時 2006-08-02 14:30 ]
かめたろ
ぬし
会議室デビュー日: 2003/03/20
投稿数: 255
投稿日時: 2006-08-02 13:38
引用:

WHERE (CityName = ISNULL(@CityName, CityName)) AND (StoreName LIKE '%')


このケースで、私がよく使うのは
コード:

WHERE (CityName = @CityName OR @CityName IS NULL) AND (StoreName LIKE '%')


なんでそんなINDEX使ってんのって場合があるから、実行プランの確認はお忘れなく
 ↑あ、これはSQLServer2000です。他のDBMSはどうだろ・・・(コメント追加)

[ メッセージ編集済み 編集者: かめたろ 編集日時 2006-08-02 18:01 ]
ちびんぼ
会議室デビュー日: 2006/08/02
投稿数: 10
お住まい・勤務地: 千葉県・東京都江東区
投稿日時: 2006-08-02 18:00
初めまして。初投稿です。

引用:
このケースで、私がよく使うのは
コード:
WHERE (CityName = @CityName OR @CityName IS NULL) AND (StoreName LIKE '%')





これだと最初にスレ主が言っていた↓みたいな動き出来なくないですか?

引用:

そこでお聞きしたいのですが、入力無しの項目については「条件=全てのデータ」としてGridViewから処理させたいのですが、個々のTextBoxの入力値をチェックして条件分岐させるコードを書く以外に、GridViewへの設定のみで実装する方法は無いでしょうか?



自分的にはこんな感じかなぁって思います。
見当違いだったらすみません。。。

コード:
SELECT StoreName, CityName
FROM Store
WHERE ((CityName is null) or (CityName = ISNULL(@CityName, CityName))) AND (StoreName LIKE '%') 

べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2006-08-02 18:36
コード:
SELECT StoreName, CityName

FROM Store
WHERE ((CityName is null) or (CityName = ISNULL(@CityName, CityName))) AND (StoreName LIKE '%')

これだと、TextBoxに入力が合った場合でもnullの項目は必ず取得されてしまいませんか?

[追記]
つまり、下の例で @CityName = '品川区' とした場合に金太郎もとれてしまう、と。

[ メッセージ編集済み 編集者: べる 編集日時 2006-08-02 18:46 ]
かめたろ
ぬし
会議室デビュー日: 2003/03/20
投稿数: 255
投稿日時: 2006-08-02 18:36
引用:

これだと最初にスレ主が言っていた↓みたいな動き出来なくないですか?


うぉっ、やべーって一瞬冷や汗をかきましたよ。なぜなら、あの書き方が稼働中のシステムにそこら中にちりばめられているものですから。一応、論より証拠ということで・・・

コード:

declare @Store table(StoreName varchar(10), CityName varchar(10))
insert into @Store values('桃太郎','品川区')
insert into @Store values('金太郎',null)

declare @StoreName varchar(10), @CityName varchar(10)
select @StoreName = '%', @CityName = null

SELECT StoreName, CityName FROM @Store
WHERE (CityName = @CityName OR @CityName IS NULL) AND (StoreName LIKE @StoreName) --オレ

SELECT StoreName, CityName FROM @Store
WHERE ((CityName is null) or (CityName = ISNULL(@CityName, CityName))) AND (StoreName LIKE @StoreName) --ちびんぼさん

SELECT StoreName, CityName FROM @Store
WHERE ( (@CityName is null and CityName is null ) OR CityName = ISNULL(@CityName, CityName ) ) AND (StoreName LIKE @StoreName) --べるさん



どれも同じ結果になりますよね。直感的に何をしようとしているのか他の人が見て解ることと結局は好みですかね。

引用:

これだと、TextBoxに入力が合った場合でもnullの項目は必ず取得されてしまいませんか?


あ、ホントだ。

[ メッセージ編集済み 編集者: かめたろ 編集日時 2006-08-02 18:44 ]
ちびんぼ
会議室デビュー日: 2006/08/02
投稿数: 10
お住まい・勤務地: 千葉県・東京都江東区
投稿日時: 2006-08-02 20:42
引用:
これだと、TextBoxに入力が合った場合でもnullの項目は必ず取得されてしまいませんか?


あ・・・本当ですね。
やっぱり@CityNameのNullチェックもしなきゃ駄目ですね。。。

引用:
うぉっ、やべーって一瞬冷や汗をかきましたよ。なぜなら、あの書き方が稼働中のシステムにそこら中にちりばめられているものですから。一応、論より証拠ということで・・・


もう一回よく見直し&考えてみたら・・・たしかに大丈夫ですね。。。
何で駄目だと思ったんだろう(;´Д`)

みなさんお騒がせしてすみません。
そしてべるさん・かめたろさん、ご指摘ありがとうございました。m(__m)

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