ストアドプロシージャに入る変数があります。この変数は、値を持つことも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ステートメントを含める必要がありますか?