Условная фильтрация на SQL сервере - PullRequest
0 голосов
/ 06 июля 2011

Мне нужно написать сохраненный процесс для страницы поиска. Страница поиска позволяет пользователю выбрать «Любой» для некоторых фильтров, и каждый фильтр отображается на столбец в моей БД.

Как лучше всего подойти к этому в моем хранимом процессе:

(1) Должен ли я использовать динамический SQL (sp_executesql) и построить запрос на основе выбранных фильтров? Повлияет ли это на кэширование плана выполнения?

(2) Должен ли я перевести «Any» во все возможные значения и использовать то же самое в статическом запросе?

(3) Стоит ли сохранять результаты во временной таблице с использованием обязательных фильтров, а затем применять дополнительные фильтры (поддерживающие ЛЮБУЮ опцию) по одному к этим результатам?

(4) Любой другой подход, о котором я не думал?

1 Ответ

2 голосов
/ 06 июля 2011

Не зная, как пользователь выбирает фильтр, я бы сделал что-то вроде этого:

SELECT * FROM TABLE 
WHERE (FILTER_FOR_COL_A IS NULL OR COL_A = FILTER_FOR_COL_A) 
AND   (FILTER_FOR_COL_B IS NULL OR COL_B = FILTER_FOR_COL_B)

FILTER_FOR_COL_A - значение фильтра для столбца COL_A. Если пользователь выбрал ANY, FILTER_FOR_COL_A будет NULL. Очевидно, что если COL_A может быть NULL и пользователь должен иметь возможность указать это как фильтр, то NULL не лучший способ представить фильтр ANY. Вам нужно подумать о другом значении или втором параметре для этого. Кроме того, этот подход не будет работать, если пользователь может указать несколько значений фильтра для одного столбца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...