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

Откуда: Москва
Сообщений: 1139
Доброго времени суток,

есть простой запрос:
SELECT * FROM TBL_MAIN WHERE (COL1 = 0) AND (COL2 = 5) AND (COL3 = 2)
Это будет функция, которая возвращает таблицу значений, в зависимости от фильтров пользователя.


Проблема:
количество фильтров может меняться. Т.е. в каком то случае надо сделать выборку по COL1, а в другом случае по COL2 & COL3.
Как все это можно написать с параметрами? Чтобы если есть параметр, то фильтр по нему применялся, а если его нет, то не применялся.

Спасибо.
9 мар 13, 22:41    [14030547]     Ответить | Цитировать Сообщить модератору
 Re: Фильтр Like с параметром  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
SELECT ... FROM TBL_MAIN WHERE (@PARAM1 IS NULL OR COL1 = @PARAM1) AND (@PARAM2 IS NULL OR COL2 = @PARAM2) ...
9 мар 13, 22:50    [14030569]     Ответить | Цитировать Сообщить модератору
 Re: Фильтр Like с параметром  [new]
Gena928
Member

Откуда: Москва
Сообщений: 1139
Паганель,

Гениально, спасибо.
9 мар 13, 22:51    [14030573]     Ответить | Цитировать Сообщить модератору
 Re: Фильтр Like с параметром  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
Куча OR... Бррр...
ЯТД, ISNULL все же лучше:)) Если неправ - поправьте плз)
SELECT * FROM TBL_MAIN WHERE COL1 = ISNULL(@Param1,COL1) AND ISNULL(TXT2,'') LIKE ISNULL(NULLIF(@Param2,''),'%')
10 мар 13, 03:29    [14030999]     Ответить | Цитировать Сообщить модератору
 Re: Фильтр Like с параметром  [new]
qwerty112
Guest
Cygapb-007
Куча OR... Бррр...
ЯТД, ISNULL все же лучше:)) Если неправ - поправьте плз)
SELECT * FROM TBL_MAIN WHERE COL1 = ISNULL(@Param1,COL1) AND ISNULL(TXT2,'') LIKE ISNULL(NULLIF(@Param2,''),'%')

это условие - COL1 = ISNULL(@Param1,COL1)
не даст выбрать строки с COL1=NULL
10 мар 13, 03:41    [14031013]     Ответить | Цитировать Сообщить модератору
 Re: Фильтр Like с параметром  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
Cygapb-007
Куча OR... Бррр...
ЯТД, ISNULL все же лучше:)) Если неправ - поправьте плз)
SELECT * FROM TBL_MAIN WHERE COL1 = ISNULL(@Param1,COL1) AND ISNULL(TXT2,'') LIKE ISNULL(NULLIF(@Param2,''),'%')

автор
ISNULL(TXT2,'') LIKE ISNULL(NULLIF(@Param2,''),'%')
а тут будет невозможно использовать индекс по txt2
11 мар 13, 11:58    [14034366]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить