我正在使用变量让我的SELECT以2种不同的"模式"运行:
DECLARE @Mode as Varchar(1) = 'A'
SELECT
CASE
WHEN @Mode = 'A'
THEN FieldABC * 2
ELSE FieldABC * 3
END AS FieldABC,
CASE
WHEN @Mode = 'A'
THEN FieldDEF
ELSE FieldGHI
END AS FieldJKL
WHERE
FieldABC BETWEEN 0 AND 100
Run Code Online (Sandbox Code Playgroud)
当我想运行SELECT的"B"版本时,我只需要更改变量值.一切正常.
我现在想要更改WHERE子句,因此它也依赖于变量:
IF @Mode = 'A' THEN
WHERE FieldABC > 0
ELSE
WHERE FieldABC < 0
END IF
Run Code Online (Sandbox Code Playgroud)
除此之外,这种语法在SQL中完全是无意义的!
如何WHERE根据相同的变量实现我的子句的两种不同风格- 或者SELECT在两种不同模式之间切换的其他简单方法?
你可以用组合做到这一点AND和OR:
WHERE (@Mode='A' AND FieldABC > 0)
OR (@Mode='B' AND FieldABC < 0);
Run Code Online (Sandbox Code Playgroud)
或者用CASE表达式:
WHERE CASE
WHEN @Mode = 'A' AND FieldABC > 0 THEN 1
WHEN @Mode = 'B' AND FieldABC < 0 THEN 1
ELSE 0
END = 1;
Run Code Online (Sandbox Code Playgroud)