Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
参数为null时where语句中的TSQL情况_Sql_Sql Server_Tsql - Fatal编程技术网

参数为null时where语句中的TSQL情况

参数为null时where语句中的TSQL情况,sql,sql-server,tsql,Sql,Sql Server,Tsql,我的SP给我带来了很多困难 sp获得两个参数@madeByUserId和@reportedByUserId。 我想要一些像: select * from table where MadeByUserId = @madeByUserId (if(@reportedByUserID != null) and ReportedByUserID = @reportedByUserID) 基本上,我想在where子句中添加另一个基于@reportedByUserId的null/notnull状态的

我的SP给我带来了很多困难

sp获得两个参数@madeByUserId和@reportedByUserId。 我想要一些像:

 select * from table
  where MadeByUserId = @madeByUserId (if(@reportedByUserID != null) and ReportedByUserID = @reportedByUserID)
基本上,我想在where子句中添加另一个基于@reportedByUserId的null/notnull状态的过滤条件

可能吗

非常感谢, Radu

试试:

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

您可以使用
合并

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

结合

返回第一个非空表达式 在它的论点中

添加if语句

如果(@reportedByUserId不为NULL)

选择* 来自表t
其中t.MadeByUserId=MadeByUserId等

我想这会给你你想要的

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

或者以更简洁的方式:
其中MadeByUserId=@MadeByUserId和ReportedByUserID=isnull(@ReportedByUserID,ReportedByUserID)