4

ストアドプロシージャに入る変数があります。この変数は、値を持つこともnullになることもできます。

  • 変数がnullの場合、テーブル内のすべての行を選択する必要があります(NULL値を持つものもあれば、実際のデータを持つものもあります)。
  • 変数がnullでない場合は、変数が列と一致する行を選択するだけで済みます。

この条件文は、達成したいことを説明するために作成しました。

if 

@status is null, select all the rows (rows with NULL for table.status, and rows with actual data for table.status)

else

select the rows where @status equals table.status

これは私が思いついたものです(そのうちの1つ):

WHERE 
   book.book_nme LIKE @search_input AND
   book.book_desc LIKE @search_input AND 
   (book.author LIKE ISNULL(@author, book.author)) AND
   (bookStatus.status_desc LIKE ISNULL(@status, bookStatus.status_desc))

唯一の問題は、bookStatus.status_descがNULLの場合、その行が選択されないことです(@statusがnullの場合)

私はとても混乱しているので、値を優先しているように見えるCoalesceも調べてみましたが、どうしたらよいかわかりません。

ストアドプロシージャに巨大なCASEを作成し、2つのselectステートメントを含める必要がありますか?

4

4 に答える 4

6
WHERE  book.book_nme LIKE @search_input AND
book.book_desc LIKE @search_input AND 
(@author IS NULL OR book.author LIKE @author) AND
(@status IS NULL OR bookStatus.status_desc LIKE @status) ...

更新
の両方の条件を追加しました@author@status

于 2012-06-12T15:06:53.937 に答える
3

あなたがあなたの説明についてそれを考えるならば、それは次のように分類されます:

  • @statusがnullの場合、すべての行を返します
  • それ以外の場合は、@statusに一致する行を返します。

次のように、SQLの最後の行を次のように表現できます。

(@status is null OR bookStatus.status_desc LIKE @status)
于 2012-06-12T15:09:48.133 に答える
0

私はいつもこれを使います:

WHERE fieldname = ISNULL(@parameter、fieldname)

これがロジャーに役立つことを願っています

于 2014-07-30T11:08:56.417 に答える
0

where(field1 like isnull(@parameter,field1))

パラメータがnullの場合、field1からすべてのデータを取得します。

select field from table1

これはSybaseで機能します。

于 2015-09-11T21:45:01.107 に答える