如果参数为空,则在 where 语句中的 TSQL 案例

Posted

技术标签:

【中文标题】如果参数为空,则在 where 语句中的 TSQL 案例【英文标题】:TSQL Case in where statement if parameter is null 【发布时间】:2010-12-08 08:17:14 【问题描述】:

我有一个 SP,它给我带来了很多困难。

sp 获取两个参数@madeByUserId 和@reportedByUserId。 我想要类似的东西:

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

基本上,我想在 where 子句中添加一个基于 @reportedByUserId 的 null/not null 状态的过滤条件

这可能吗?

非常感谢, 拉度

【问题讨论】:

【参考方案1】:

试试:

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

【讨论】:

或者更简洁的方式:where MadeByUserId = @madeByUserId AND ReportedByUserID = isnull(@reportedByUserID, ReportedByUserID)【参考方案2】:

你可以使用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

结合

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

【讨论】:

【参考方案3】:

添加 if 语句

如果(@reportedByUserId 不为空)

选择 * 从表 t WHERE t.MadeByUserId = madeByUserId 等

【讨论】:

【参考方案4】:

我认为这会给你你所追求的。

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

【讨论】:

以上是关于如果参数为空,则在 where 语句中的 TSQL 案例的主要内容,如果未能解决你的问题,请参考以下文章