SQL Server 2005.
У меня есть хранимая процедура, которая принимает несколько параметров, которые могут или не могут иметь данные, переданные им.Таким образом, они могут отображаться в виде пустой строки или с данными.
Данные будут представлять собой список идентификаторов с разделителями ... идентификатор производителя, идентификатор каталога и т. Д. Процесс выполняет поиск записей,и если какой-либо из этих параметров имеет данные, он используется в предложении where.
FYI: Split - это функция, которая разбивает строку (принимает разделитель) и возвращает таблицу.
WHERE
...
AND m.Mfg_ID in (CASE WHEN @manufacturerIds <> '' THEN (SELECT * FROM Split(@manufacturerIds, '|')) ELSE (select m.Mfg_Id) END)
Я получаю сообщение об ошибке: «Подзапрос возвратил более 1 значения. Это недопустимо, если подзапрос следует =,! =, <, <=,>,> = Или когда подзапрос используется в качестве выражения."
Чего я не понимаю, так это того, что если я удаляю оператор CASE, чтобы у меня было только это ...
WHERE
...
AND m.Mfg_ID in (SELECT * FROM Split(@manufacturerIds, '|'))
... он работает нормально;однако, это лишает меня возможности передавать пустую строку.
Любая помощь будет принята с благодарностью!