当@Param = -1过滤时使用IN语句

时间:2012-09-11 14:26:40

标签: sql sql-server sql-server-2008

我的查询需要帮助:

当我向查询发送一个值为-1的参数时,我想用'IN'语句过滤,否则按照值进行过滤。

我试图做这样的事情:

WHERE  (StatusId = CASE WHEN @StatusId = - 1 
        THEN 
        @StatusId IN (1, 2, 3) 
        ELSE 
        StatusId = @StatusId  END)

感谢。

3 个答案:

答案 0 :(得分:1)

我认为你的例子中有一个拼写错误,如下所示:

WHEN @StatusId = - 1 THEN  @StatusId IN (1, 2, 3)  

...不会执行任何操作,因为如果@StatusId = -1,它将不会是in (1, 2, 3)

Anywhos,您只需使用OR和嵌套括号:

WHERE  (StatusId IN (1, 2, 3)  AND @StatusId = -1)
        OR (StatusId = @StatusId AND @StatusId <> -1)

答案 1 :(得分:1)

您不需要CASE语句,只需使用WHERE子句:

WHERE 
(
    @StatusId = -1 AND StatusId IN (1, 2, 3) 
) 
OR
(
    StatusId = @StatusId AND @StatusId <> -1
) 

答案 2 :(得分:1)

无需使用CASE。你可以直接这样做:

WHERE 
(@StatusId = -1 AND StatusId IN (1, 2, 3) ) 
OR
(StatusId = @StatusId AND @StatusId <> -1) 

如果您想使用CASE,可以这样做:

WHERE StatusId IN 
(CASE @StatusId 
 WHEN -1 THEN 1,2,3 
 ELSE @StatusId 
END)