如果参数为空,则在 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 案例的主要内容,如果未能解决你的问题,请参考以下文章
在 Java DB2 JDBC 中:如何在 SELECT 语句的 WHERE 子句中使用空参数,其中值可以为空或不为空?
MyBatis框架中的条件查询!关键字exists用法的详细解析