Я пытаюсь реализовать функцию поиска для нашей базы данных через веб-сайт. База данных имеет одну основную таблицу и пять таблиц, которые имеют внешний ключ к главному (подробные таблицы). Подробные таблицы содержат значения NULL, которые можно подключить к таблицам поиска в приложении. Я хочу позволить пользователю выбрать любое / все значения из таблицы поиска и передать его хранимой процедуре в виде строки, разделенной запятыми. Проблема, с которой я столкнулся, связана с тем, что запись имеет значения NULL, потому что она возвращает UNKNOWN, поэтому я не получаю никаких строк назад.
вот пример того, что я хочу в предложении where:
ПСЕВДОКОД
Input Variable
@StateIDs VARCHAR(MAX)
@StateIDs = '1, 2, 3' //I have a split function to split this up
//@StateIDs could have zero or all 50 states in it so this needs to work with either
WHERE
State.StateID IN (udf_SplitAndCoalesce(@StateIDs, State.StateID, ','))
//udf_SplitAndCoalesce is used to split up the csv input parameter and if that is null to return the current value in the record in the table
This works unless @StateIDs = NULL the where clause becomes
WHERE State.StateID IN (State.StateID)
, что нормально, если State.StateID = NULL, тогда становится
WHERE State.StateID IN (NULL)
, который вернет UNKNOWN (без строк)
Если список csv в @StateIDs
равен нулю, тогда я действительно не хочу, чтобы эта часть предложения Where была там, но я не знаю способа исключения или включения целых операторов по условию. Самая большая проблема в том, что существует около двадцати различных входных данных, поэтому я не могу просто написать два разных оператора выбора, один, когда @StateIDs
не равен нулю, и один, когда он есть.
В конечном итоге я пытаюсь создать динамическое предложение where без выполнения оператора в виде строки, используя sp_executesql
.
Я работаю над этим уже пару дней и создаю кучу разных решений, но каждое из них не совсем то, что мне нужно, и все сводится к работе с NULL.
Любая помощь, которую мне могут оказать люди, будет очень признательна.