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

Rad*_*u D 10 sql t-sql sql-server

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

sp得到两个参数@madeByUserId和@reportedByUserId.我希望有类似的东西:

 select * from table
  where MadeByUserId = @madeByUserId (if(@reportedByUserID != null) and ReportedByUserID = @reportedByUserID)
Run Code Online (Sandbox Code Playgroud)

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

那可能吗?

非常感谢,Radu

Mic*_*sov 8

尝试:

 select * from table
 where MadeByUserId = @madeByUserId 
 AND (@reportedByUserID IS null OR ReportedByUserID = @reportedByUserID)
Run Code Online (Sandbox Code Playgroud)

  • 或者以更简洁的方式:`其中MadeByUserId = @madeByUserId和ReportedByUserID = isnull(@reportedByUserID,ReportedByUserID) (2认同)

Lie*_*ers 8

你可以用COALESCE.

SELECT  * 
FROM    Table
WHERE   MadeByUserId = @madeByUserId 
        AND ReportedByUserID = COALESCE(@reportedByUserID, ReportedByUserID)
Run Code Online (Sandbox Code Playgroud)

这转化为

 if @reportedByUserID is `NOT NULL` then 
   compare ReportedByUserID with @reportedByUserID
 else
   compare ReportedByUserID with ReportedByUserID
Run Code Online (Sandbox Code Playgroud)

来自MSDN

合并

返回其参数中的第一个非空表达式.