如果参数为null,则where where语句中的TSQL Case

时间:2010-12-08 08:17:15

标签: sql sql-server tsql

我有一个SP给了我很多困难时期。

sp获取两个参数@madeByUserId和@reportedByUserId。 我希望有类似的东西:

 select * from table
  where MadeByUserId = @madeByUserId (if(@reportedByUserID != null) and ReportedByUserID = @reportedByUserID)

基本上我想在where子句中创建一个案例,以包含另一个基于@reportedByUserId的null / not null状态的过滤条件

这可能吗?

非常感谢, 拉杜

4 个答案:

答案 0 :(得分:8)

您可以使用COALESCE

SELECT  * 
FROM    Table
WHERE   MadeByUserId = @madeByUserId 
        AND ReportedByUserID = COALESCE(@reportedByUserID, ReportedByUserID)

这转换为

 if @reportedByUserID is `NOT NULL` then 
   compare ReportedByUserID with @reportedByUserID
 else
   compare ReportedByUserID with ReportedByUserID

来自MSDN

  

COALESCE

     

返回第一个非空表达式   在其论点中。

答案 1 :(得分:7)

尝试:

 select * from table
 where MadeByUserId = @madeByUserId 
 AND (@reportedByUserID IS null OR ReportedByUserID = @reportedByUserID)

答案 2 :(得分:0)

添加if语句

IF(@reportedByUserId IS NOT NULL)

SELECT * 从表t 在哪里.MadeByUserId = madeByUserId等

答案 3 :(得分:0)

我认为这会给你你想要的东西。

IF (@reportedByUser IS NULL)
    select * from table 
    where MadeByUserId = @madeByUserId
ELSE
    select * from table 
    where MadeByUserId = @madeByUserId and ReportedByUserID = @reportedByUserID)