我需要根据输入参数的值更改查询的WHERE
子句。
我猜这是可能的,但是似乎我以错误的方式来处理它?</ p>
存储过程的简化版本:
CREATE PROCEDURE [dbo].[SampleProc]
@appId INT,
@siteId INT
AS
BEGIN
SELECT *
FROM T_Mytable m
WHERE
CASE
WHEN @siteId = '0' THEN m.appId = @appId
ELSE m.appId = @AppId AND m.siteId = @siteId
END
END
如何实现此WHERE
子句。我无法在CASE
的{{1}}表达式中进行赋值。
答案 0 :(得分:4)
由于两个案例都具有m.appId = @appId
条件,因此您可以将WHERE
的逻辑重构为:
SELECT *
FROM T_Mytable m
WHERE
m.appId = @appId AND
@siteId IN (0, m.siteId);
CASE
表达式旨在生成文字值(而不是逻辑表达式)作为它们的输出。因此,将CASE
表达式放入WHERE
子句中是没有道理的。而是直接使用AND
加OR
编写条件。