2011-07-21 35 views
2

我有一個整數字段person_id,其默認值爲NULL。我正在使用存儲過程並提取人名和地址。如果用戶沒有傳遞一個值,則所有記錄都被拉出,爲空而不是空值。我該怎麼做。可能是Case語句還是其他?如何在一個查詢中返回null和非空值

my_procedure(   <--- this is pseudo code 
@person_id int null 
begin 
select name, address from PERSON 
WHERE person_id like case NULL then NULL else '%' 
end 

空要求 - > IS NULL 數量需要= 123

編輯 我需要的條件太多,如果沒有通過,所有值都被拉動。如果事情通過,該值被搜索

+0

對於編輯,您需要提供更多信息。 – JNK

+0

解決:IsNULL(mycolum,'')如果atperson_id爲空,則爲'%'else'%'+ atperson_id +'%' –

+0

發佈答案並接受它。或刪除它,因爲它仍然不是很清楚你要求什麼。 – JNK

回答

0

在這種情況下正確的代碼

IsNULL(mycolum,'') LIKE CASE when person_id is null then '%' else '%' + person_id + '%' 

ISNULL覆羽值轉換成空字符串,然後你可以不用擔心只有字符串,而不是空值。

1

WHERE (@personID is NULL OR personid IS NULL OR personid = @personid)

只要把你的兩個案件在括號WHERE條款。

編輯

又增加了OR條款涵蓋了我THINK你所要求的。