带有CASE / WHEN和NULL值的SQL Server 2008 WHERE子句

时间:2013-11-01 17:55:25

标签: sql sql-server sql-server-2008 null case

我正在尝试写一些类似的东西:

SELECT *
FROM MyTable m
WHERE m.Category = CASE WHEN @Category IS NULL THEN m.Category ELSE @Category END

基本上,我需要m.Category等于@Category的行,如果这个行有值;否则,我需要所有的线路。

但如果m.Category的值为NULL,则不会发回该行,因为SQL需要一些内容WHERE m.Category IS NULL而不是WHERE m.Category = NULL

那么,我怎么能修改我的请求告诉SQL:“如果@Category为空,我需要所有行(即使m.Category为空的行也是如此),但如果@Category有{}一个值,我只需要m.Category匹配@Category的行?

1 个答案:

答案 0 :(得分:3)

你可以这样写:

select *
from MyTable m
where @Category is null or m.Category = @Category