Каков наилучший способ обработки нескольких вариантов поиска?
Вероятно, это вопрос, который существует уже 20 лет, но я все равно задам его. У меня есть экран с несколькими вариантами поиска. Некоторые могут быть объединены. Некоторые являются эксклюзивными.
Пример:
Поиск по имени и фамилии
ИЛИ ЖЕ
Поиск по возрасту
Каков наилучший способ справиться с этим? Должен ли я справиться с этим в приложении и либо вызвать 1 из многих функций, либо 1 функцию с целой связкой if/else. Выполнение серии if/else просто кажется устаревшим. Разве нет более эффективного способа?
2 ответа
Я рекомендую использовать конструктор для сбора различных предикатов в объект, а затем передать этот объект в функцию / метод, который генерирует соответствующий запрос.
Java-библиотека SQLORM использует этот подход для построения запросов SQL объектно-ориентированным способом. На этой странице представлено хорошее обсуждение плюсов и минусов построения строки запроса с использованием метода с большим количеством операций if-else по сравнению с подходом компоновщика.
Я бы сделал проверку того, какие поля могут быть заполнены вместе на переднем конце.
Для хранимого процесса основная цель - не иметь SQL с конкатонациями в нем.
В sproc я склонен использовать строку операторов isnull для этого, чтобы использовать параметр или значение поля, если параметр равен нулю.
как вы говорите, это не новый трюк, но он работает и намного быстрее, чем генерировать новый sql при каждом выполнении. У этого также есть легко предсказуемый план выполнения.