Похоже, что вы после логической логики:
SELECT {columns}
FROM dbo.Events E
WHERE (E.Division = 'UK' AND @DivisionCode = 'UK')
OR (E.Division IN ('CA','US') AND @DivisionCode IS NULL); --Assumes DivisionCode won't have a value
Проблема с этим, однако, в том, что у вас есть запрос на все запросы. Таким образом, у вас может имеется плохо кэшированный план запроса для выполняемого запроса. Один из способов справиться с этим - добавить OPTION (RECOMPILE)
в конец запроса, чтобы каждый раз создавать план запроса. В противном случае вы могли бы использовать IF
Logic и 2 оператора:
IF @DivisionCode = 'UK'
SELECT {columns}
FROM dbo.Events E
WHERE E.Division = 'UK';
ELSE
SELECT {columns}
FROM dbo.Events E
WHERE E.Division IN ('US','CA');
Для простоты, которую мы имеем, я бы сказал, что последнее будет лучше.
Примечание: Естьне Case
операторы в T-SQL. Что у вас есть CASE
выражение. Case
операторы аналогичны IF
и изменяют логический «поток» SQL, где выражение возвращает скалярное значение.