2013-02-20 3 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 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 

Если Firstname и фамилия PARAMS не равны нулю, но вместо того, чтобы символ, например, «J», как может Я пишу что-то похожее на предложение delete_flag .. и первое имя типа «J%», но если не использовать null?

Любые идеи?

ответ

4

Вы можете использовать это:

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

Убедитесь, что вы положили скобки вокруг двух частей, когда у вас есть больше, чем просто то, что выше. –

+0

Хм ... не кажется, что работает с parens также .. где 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

+0

@thegunner Что не работает? Показывать запрос, если это возможно, на http://sqlfiddle.com с тестовыми данными. –