Это может скомпилироваться, но кажется, что чего-то не хватает.@Filter
, по-видимому, представляет поле , по которому вы фильтруете, и можно было бы увидеть значение для проверки по полю, например,
SELECT
id,
firstName,
lastName
FROM
Person
WHERE @Value =
CASE WHEN @Filter = 'firstName' THEN firstName
WHEN @Filter = 'lastName' THEN lastName
END
Если это ваше намерение, то требуется только одно выражение CASE
, независимо от количества возможных полей фильтра.
В любом случае, оператор CASE
будет очень эффективным.SQL Server увидит, что выражения WHEN
сравнивают скалярные значения и соответственно оптимизируют (другими словами, значение @Filter
не нужно пересматривать для каждой строки).