- - PR -
全件取得とWHERE指定のSQLを1つのDataAdapterで完結したい
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-06-10 17:43
こんにちは
個人マスタテーブルにユーザID,氏名が登録されているとします。 そこで以下のコード sqlDA.SelectCommand.CommandText= "SELECT USERID,USERNAME FROM MASTER WHERE USERID = @USERID" sqlCom.Parameters.Add("@USERID", SqlDbType.VarChar).Value = user sqlDAUser.Fill() として該当のユーザIDで抽出する場合と全ユーザを取得したい場合と2通りある場合には、WHERE以下がないSQLを別々に作るしかないのでしょうか? パラメータの渡し方次第でひとつのSQLを使いまわす事は可能でしょうか? よろしくお願いします。 [ メッセージ編集済み 編集者: だいまる 編集日時 2004-06-10 17:45 ] | ||||||||
|
投稿日時: 2004-06-10 17:48
NAL-6295です。
を
じゃ、駄目ですかね。 | ||||||||
|
投稿日時: 2004-06-10 17:54
NAL-6295様
さっそくありがとうございます。 今クエリビルダ(VS.NET)を使ってユーザIDを指定した場合はOKはOKでしたが、 何も指定しない場合は1件も取得できませんでした。 それともクエリビルダでNULLを入れることができないから取得できてないのでしょうか? | ||||||||
|
投稿日時: 2004-06-11 08:31
Oracleでの書式
SELECT * FROM TABLE1 WHERE NVL(COLUMN1, -1) = NVL(NVL(InputValue, COLUMN1), -1); NVL関数は、「第1引数がNULLの場合、第2引数を返す」関数です。該当するSQL Serverの関数を使用してください。 よく見たら、「nullが入るかもしれないカラムを検索するとき」からコピーしてた。 SQL Serverなら、こうかな? SELECT USERID,USERNAME FROM MASTER WHERE USERID = ISNULL(@USERID, USERID); [ メッセージ編集済み 編集者: Jitta 編集日時 2004-06-11 08:38 ] | ||||||||
|
投稿日時: 2004-06-11 09:57
そうだと、思います。 一度、コーディングして確認してみてください。 #以前に、そういう実装をした事があるので多分、大丈夫だと・・・。 #NULLの時は、@USERID IS NULLがTRUEになり、(@USERID=USERID)がFALSEとなるが、 #ORで指定されているので全レコードTRUEとなり、全件取得できるはずという考えです。 #でも、Jittaさんの案の方が、モアベターですね。 #条件が複数あった時なんかは、特に。 #転記ミス修正 [ メッセージ編集済み 編集者: NAL-6295 編集日時 2004-06-11 10:01 ] [ メッセージ編集済み 編集者: NAL-6295 編集日時 2004-06-11 12:55 ] | ||||||||
|
投稿日時: 2004-06-11 12:38
横槍質問で教えてください。
私はSQLServerは使ったことがないのですが、 (Oracle,Accessは有) #NULLの時は、@USERID = NULLがTRUEになり、(@USERID=USERID)がFALSEとなる・・・ SQLServerのSQLでは、 NULL = NULL の論理演算がTrueになるんですか? 一応、今Oracleで実験してみると、NULL=NULLはFALSEです。 NULL = NULL の構文をTRUEと解釈してくれると、 SQLを動的にプログラム生成する場合は 非常に都合がよくて楽ですが(笑) 是非教えてください。 | ||||||||
|
投稿日時: 2004-06-11 12:49
platiniさん、こんにちは。
揚げ足を取っているつもりではないでしょうけど、元の投稿では WHERE @USERID IS NULL OR (USERID = @USERID) となっているので、単なる転記ミスじゃないですか? | ||||||||
|
投稿日時: 2004-06-11 12:55
NAL-6295です。 指摘の通り転記ミスです。 元の@USERID IS NULLが正解です。 というわけで、修正しておきます。 |