Использование CASE в операторе WHERE, когда параметр имеет несколько значений
У меня есть проблема, которая, я думаю, связана с наличием параметра с несколькими значениями.
В моей TblActivity есть два поляTblActivity.ActivityServActId
а такжеTblActivity.ActivityContractId
который я хочу включить в мое заявление WHERE.
Фильтрация по ним необязательна. Если пользователь выбирает «Да» для параметра@YESNOActivity
, то я хочу отфильтровать запрос, ища строки, гдеTblActivity.ActivityServActId
соответствует одному из параметров в параметре@ServiceActivity
.
То же самое касается@YESNOContract
, TblActivity.ActivityContractId
а также@Contract
соответственно
Мне удалось добраться до этого:
WHERE
(CASE WHEN @YESNOActivity = 'Yes' THEN TblActivity.ActivityServActId ELSE 0 END)
IN (CASE WHEN @YESNOActivity = 'Yes' THEN @ServiceActivity ELSE 0 END)
AND (CASE WHEN @YESNOContract = 'Yes' THEN TblActivity.ActivityContractId ELSE 0 END)
IN (CASE WHEN @YESNOContract = 'Yes' THEN @Contract ELSE 0 END)
Однако, хотя этот код работает нормально, если в параметре выбрано только одно значение@ServiceActivity
или же@Contract
, как только у меня есть более одного значения в этих параметрах, я получаю ошибку:
Incorrect syntax near ','.
Query execution failed for dataset 'Activity'. (rsErrorExecutingCommand)
An error has occurred during report processing. (rsProcessingAborted)
Кто-нибудь может увидеть, что я делаю не так? Я мог бы понять это, если бы в операторе WHERE было = вместо IN, но я не могу понять это.
Использование SQL Server 2008 и SSRS 2008-r2