2013-11-01 151 views
2

我想寫類似:SQL Server 2008中的WHERE子句與CASE/WHEN和NULL值

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

基本上,我需要在那裏m.Category等於@Category如果這其中有一個價值線;否則,我需要所有線路。

但如果m.CategoryNULL值,行不退還,因爲SQL需要的東西LILE WHERE m.Category IS NULL而不是WHERE m.Category = NULL

所以,我怎麼能修改我的要求告訴給SQL:「我需要的所有行,如果@Category爲空(偶數行,其中m.Category爲空),但如果@Category有一個價值,我只需要在那裏m.Category比賽@Category線?

回答

3

你可以寫這樣的:

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

好了,它是那麼容易我甚至沒有想到它......非常感謝 – AlexB

+0

@羅馬PEKAR - 你叫什麼名字呢?我大約在5年前使用過它,並且今天需要它,而我無法爲我的生活而奮鬥記住它的名字。 – Steven

+0

@Steven我不知道,不確定它有一些具體的名字 –