我有一个SP给了我很多困难时期。
sp获取两个参数@madeByUserId和@reportedByUserId。 我希望有类似的东西:
select * from table
where MadeByUserId = @madeByUserId (if(@reportedByUserID != null) and ReportedByUserID = @reportedByUserID)
基本上我想在where子句中创建一个案例,以包含另一个基于@reportedByUserId的null / not null状态的过滤条件
这可能吗?
非常感谢, 拉杜
答案 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)