根据输入参数更改WHERE子句

时间:2020-04-21 06:33:57

标签: sql-server tsql

我需要根据输入参数的值更改查询的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}}表达式中进行赋值。

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子句中是没有道理的。而是直接使用ANDOR编写条件。