Перефразируйте логику, чтобы удалить выражение CASE
:
SELECT *
FROM SomeTable
WHERE @CategoryID IN (0, ID);
Это работает, потому что когда @CategoryID = 0
, предложение WHERE
всегда истинно, в противном случае оно будет истинным, когда ID = @CategoryID
.
Ваша текущая попытка является распространенной проблемой, обусловленной тем, что вы не используете выражение CASE
по назначению. Предикат выражения CASE
(т. Е. Того, что следует за логикой после THEN
и ELSE
) должен представлять собой значение литерал , а не другое логическое выражение. В этом случае нам даже не нужно CASE
.