2013-12-16 2 views
1

Не знаете, можем ли мы добавить, если или в случае внутри условия.Добавить оператор IF/CASE внутри, где условие

Я пытаюсь преобразовать динамический запрос, чтобы простой запрос

Declare @sQuery varchar(20000) 
set @sQuery='' 

set @sQuery ='select * from #tb_user ud' 

if(@Number<>'') 
set @sQuery = @sQuery + 'and upper(ud.ID) like ''' + upper(@Number) + '%''' 

if(@Name<>'') 
set @sQuery = @sQuery + 'and upper(ud.FName) like ''' + upper(@Name) + '%''' 

Exec(@sQuery) 

Примечание:

Ниже дается запрос только пример я скинула где я не получаю, как обрабатывать, если условие в простом запросе. (фактический запрос имеет много вещей)

заранее спасибо за любую помощь

+0

как я добавил примечание ~ это всего лишь часть запроса ~ и его некоторая часть, которая находится внутри процедуры Store – Malcolm

ответ

1

Вы должны сгруппировать каждый тест в OR конструкции с параметром является пустой (или любой другой чек -inverted- вы делаете в if) ..

SELECT 
    * 
FROM 
    #tb_user ud 
WHERE 
    (@Number = '' OR upper(ud.ID) like upper(@Number) + '%') 
    AND 
    (@Name = '' OR upper(ud.FName) like upper(@Name) + '%') 

благодарность @bartosz для Зрительная ошибку в начальном ответе логике

+1

, если вы передадите нулевой параметр в запрос, вы можете сделать что-то вроде этого WHERE upper (ud.ID), как верхний (ISNULL (@Number, ud.ID)) + '%' – Raphael

+2

Но разве это эквивалентно динамическому запросу? Обратите внимание, что он не возвращает никакой записи, если \ @Number = '' или \ @Name = '', тогда как динамический запрос просто пропустит один или оба ifs в этом случае. (См. Также мой ответ на этот вопрос.) –

+0

@BartoszKlimek, хороший улов .. вы абсолютно правы. 'If' нужно инвертировать в группе sql .. *** обновленный ответ *** –

2

Кажется, что вы хотите использовать только определенный фильтр (@Number или @name), если он не пуст:

SELECT 
    * 
FROM 
    #tb_user ud 
WHERE 
    (@Number = '' OR upper(ud.ID) like upper(@Number) + '%') 
    AND 
    (@Name = '' OR upper(ud.FName) like upper(@Name) + '%') 
Смежные вопросы