Ste*_*a D 4 sql isnull sql-server-2008-r2
我有一个变量进入存储过程.此变量可以具有值或为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
Run Code Online (Sandbox Code Playgroud)
这就是我提出的(其中一个):
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))
Run Code Online (Sandbox Code Playgroud)
唯一的问题是如果bookStatus.status_desc
为NULL,那么它将不会选择该行(当@status为null时)
我很困惑,我也试着查看Coalesce,它似乎优先考虑价值观,但是......我不知道该怎么办.
我应该在存储过程中创建一个巨大的CASE并有两个select语句吗?
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) ...
Run Code Online (Sandbox Code Playgroud)
更新
为@author
和添加了两个条件@status