2013-02-20 70 views
0

我有一個存儲過程,它需要一些參數可能是NULL或可能不是。使用ISNULL或「LIKE」

我可以使用ISNULL選項,如果我有一個明確的參數值,但如果我想使用「LIKE」而不是null我不知道該怎麼做。請看下圖:

的參數是:

@org_id as int, 
@deleted as bit = NULL, 
@firstname as char = NULL, 
@lastname as char = NULL 

Select語句是:

select user_id, firstname,lastname,firstname +' ' + lastname as fullname, email, phone,  is_tech, is_admin,is_cust 
from users 
where [email protected]_id and is_tech=1 and delete_flag=ISNULL(@deleted,delete_flag) 
order by lastname,firstname asc 

如果名字和姓氏的PARAMS不是空的,但不是一個字符,例如 「J」,怎麼能我寫了一些類似於delete_flag子句的類似於'J%'的名字,但是如果不使用null?

任何想法?

回答

4

您可以使用此:

WHERE field LIKE @param OR @param IS NULL 
+0

確保你把兩個部分周圍的括號當你有超過正是以上。 – 2013-02-20 21:45:50

+0

嗯..似乎並沒有與parens一起工作... wherewhere users.org_id ='at'org_id和is_tech = 1和delete_flag = ISNULL('at'deleted,delete_flag)和(firstname LIKE'at'firstname或'at'firstname爲null)....我執行SP並且只傳遞它的org_id,但是當我通過例如「D」作爲第一個名字什麼都沒有出現,而且我知道有一個名字以「D」開頭的用戶 – thegunner 2013-02-20 21:50:07

+0

@thegunner什麼都行不通?如果可能,請使用測試數據在http://sqlfiddle.com上顯示查詢。 – 2013-02-20 21:51:42