Я ищу способ «лучшей практики» для решения этого распространенного сценария. Я думаю, что вопрос лучше всего задать на примере. Давайте предположим следующее:
- Цель состоит в том, чтобы написать «сводный отчет по заказам», который отображает список заказов на основе различных критериев фильтрации.
- Пример: пользователь хочет отчитываться по всем заказам, созданным в период между X и Y
- Пример: пользователь хочет отчитываться по всем заказам со статусом «открыто»
- Пример: пользователь хочет сообщить обо всех заказах, сгенерированных другим пользователем XYZ
- Пример: пользователь хочет отчитываться по всем заказам от 1000 до 10000 долларов
Эти отчеты, вероятно, будут запускаться с разных страниц, но, возможно, может существовать страница «расширенного поиска», которая позволяет им проверять / снимать флажки фильтров и определять параметры
Я хочу использовать удаленную обработку для генерации отчета
Создание единого отчета со всеми этими фильтрами, реализованными с помощью параметров отчета и фильтров отчетов, становится ОЧЕНЬ громоздким и НЕОБХОДИМЫМ ОЧЕНЬ быстро. Это заставляет меня поверить, что я должен создать одну хранимую процедуру, которая принимает все возможные значения фильтра (и NULL, если набор результатов не должен фильтроваться параметром).
Согласны ли вы с этой оценкой?
Если это так, я не эксперт TSQL и хотел бы получить несколько общих советов о том, как реализовать эту хранимую процедуру. Пока я делаю это так:
- Создать табличную переменную orderID @ resultset
- Заполнить @resultset изначально через первый фильтр (я выбрал дату начала и окончания)
- Для каждого фильтра:
- Если фильтр определен, создайте табличную переменную @tempresultset и вставьте все записи из @resultset WHERE (фильтр применим)
- Удалить из @resultset, вставить в @resultset выбрать orderid из @ tempresultset
- вернуть @resultset после применения всех фильтров
Это просто не кажется правильным / эффективным ... Есть ли лучший способ приблизиться к этому?
Будем весьма благодарны за любые другие предложения или советы о том, как подойти к этой общей проблеме. Я чувствую себя несколько потерянным из-за того, как правильно реализовать это решение, что, по-видимому, должно быть очень распространенной проблемой.