0

我想过滤我的查询,但知道语法:

这是我不正确的语法:

WHERE 
 (@StatusId = - 1 then Status.StatusId IN (1, 2, 3, 4)) 
else 
  Status.StatusId = @StatusId)
4

3 回答 3

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

请注意,@StatusId <> -1如果 @StatusId 为空,则返回 false。我假设只有在@StatusId 不等于-1 时才应该进行相等性检查。如果不是这种情况,那么您可以从第二个子句中删除该部分。

于 2012-11-30T20:09:42.153 回答
0

您需要使用布尔逻辑。试试这个:

WHERE 
 ((@StatusId = - 1 AND Status.StatusId IN (1, 2, 3, 4)) OR Status.StatusId = @StatusId)

请注意,整个语句都在括号中。

于 2012-11-30T20:09:37.037 回答
0

您可以这样做,但这样做可能会导致查询性能问题(搜索参数嗅探)。更好的是根据 的值动态生成正确的 SQL,@StatusID并且只运行您需要的位。

Where (
  @StatusID = -1 And 
  Status.StatusID In (1, 2, 3, 4)
) Or (
  @StatusID != -1 And
  Status.StatusID = @StatusID
)
于 2012-11-30T20:10:08.223 回答