Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Нубский вопрос по фильтру поиска  [new]
tual
Member

Откуда:
Сообщений: 531
Нужно написать хранимку с селектом по фильтру.
банальное дело, фильтр по ID
то есть юзер может ввести ID для фильтра, может и нет (других фильтров еще хватает)
если не введет, то ессно фильтровать по ID не надо.

Как будет выглядеть where при этом ?
Я тут нашел в соседней процедуре вот это
AND (@AgreementOfferID IS NULL OR ao.OrderId = @AgreementOfferID)
но я не понимаю ее логику работы если она мне подходит.

Подскажите плиз
20 янв 14, 15:04    [15441162]     Ответить | Цитировать Сообщить модератору
 Re: Нубский вопрос по фильтру поиска  [new]
Glory
Member

Откуда:
Сообщений: 104751
tual
но я не понимаю ее логику

Логика такая - "если не введет, то ессно фильтровать по ID не надо." иначе "фильтр по ID"
20 янв 14, 15:07    [15441186]     Ответить | Цитировать Сообщить модератору
 Re: Нубский вопрос по фильтру поиска  [new]
tual
Member

Откуда:
Сообщений: 531
тьфу блин... это параметр на нулл проверяется, а не поле в базе
туплю
спасибо

а как тогда поступить с датами
у меня 2 даты @From и @To
юзер может вводить одну, другую, обе, или никаких
20 янв 14, 15:11    [15441229]     Ответить | Цитировать Сообщить модератору
 Re: Нубский вопрос по фильтру поиска  [new]
tual
Member

Откуда:
Сообщений: 531
between тут никак не вставить ?
20 янв 14, 15:13    [15441251]     Ответить | Цитировать Сообщить модератору
 Re: Нубский вопрос по фильтру поиска  [new]
Glory
Member

Откуда:
Сообщений: 104751
tual
between тут никак не вставить ?

Вставить. Если предварительно проверить параметр на NULL и заменить его на какую-нибудь дату
20 янв 14, 15:15    [15441281]     Ответить | Цитировать Сообщить модератору
 Re: Нубский вопрос по фильтру поиска  [new]
~
Guest
tual, искать:
1) дефолтные значения переменных
2) динамический SQL запрос
20 янв 14, 15:19    [15441318]     Ответить | Цитировать Сообщить модератору
 Re: Нубский вопрос по фильтру поиска  [new]
NickAlex66
Member

Откуда:
Сообщений: 319
tual,

Только конструкции вида AND (@AgreementOfferID IS NULL OR ao.OrderId = @AgreementOfferID) я бы не стал применять на боевых базах. Оптимизатор из не "переваривает".
21 янв 14, 14:15    [15446605]     Ответить | Цитировать Сообщить модератору
 Re: Нубский вопрос по фильтру поиска  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
NickAlex66,

Если дописать в запросе OPTION (ReCompile), то переварит, за счёт постоянной его рекомпиляцией.

Но если параметров немного или запрос массовый, то канечно надо комбинировать несколько вариантов (объеденённые в UNION).
22 янв 14, 00:03    [15449818]     Ответить | Цитировать Сообщить модератору
 Re: Нубский вопрос по фильтру поиска  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34705
[quot
Я тут нашел в соседней процедуре вот это
AND (@AgreementOfferID IS NULL OR ao.OrderId = @AgreementOfferID)
но я не понимаю ее логику работы если она мне подходит.

[/quot]


это один из худших вариантов написать этот запрос. в редких случаях такое может работать, но в массе так делать нельзя .

лучше написать 20 if ов и по запросу под каждым. запросов будет много, но они золота юры работать будут.
если запросов совсем много, надо текст формировать программно и выполнять dynamic exec.
22 янв 14, 11:56    [15451367]     Ответить | Цитировать Сообщить модератору
 Re: Нубский вопрос по фильтру поиска  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34705
золота юры = зато они.
22 янв 14, 11:57    [15451380]     Ответить | Цитировать Сообщить модератору
 Re: Нубский вопрос по фильтру поиска  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
MasterZiv
надо текст формировать программно и выполнять dynamic exec.
Специально для тормозов повторяю:
Mnior
Если дописать в запросе OPTION (ReCompile), то переварит, за счёт постоянной его рекомпиляции.
И не надо никакого динамического запроса.
Тем более ваш EXEC во VIEW не всунешь.

Процедурномыслие блин.
22 янв 14, 12:06    [15451436]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить