Запись хранимой процедуры, которая будет иметь несколько входных параметров. Параметры могут не всегда иметь значения и могут быть пустыми. Но поскольку существует вероятность, что каждый параметр может содержать значения, я должен включить критерий, который использует эти параметры в запросе.Sql Server IN Пункт №
Мой запрос выглядит так:
SELECT DISTINCT COUNT(*) AS SRM
FROM table p
WHERE p.gender IN (SELECT * FROM Fn_SplitParms(@gender)) AND
p.ethnicity IN (SELECT * FROM Fn_SplitParms(@race)) AND
p.marital_status IN (SELECT * FROM Fn_SplitParms(@maritalstatus))
Так что моя проблема в том, если @gender пуст (»«) запрос будет возвращать данные, где пол поле пустым, когда я действительно хочу, чтобы просто игнорировать р. пола все вместе. Я не хочу выполнять эту задачу с использованием условных операторов IF/ELSE, потому что их было бы слишком много.
Есть ли способ использовать CASE с IN для этого сценария? OR Есть ли другая логика, что я просто не понимаю, что это решит?
Возникли проблемы с поиском что-то, что хорошо работает ...
Спасибо!
Примечание: построение единого запроса для выполнения этого часто дает ужасные планы выполнения. Следующая статья очень глубока, но подчеркивает, что DynamicSQL дает самый эффективный динамический поиск. http://www.sommarskog.se/dyn-search.html – MatBailie