sql - 语句中带有运算符的条件 WHERE 子句
问题描述
我有一个存储过程,我正在尝试对其执行条件 WHERE 子句。我相信解决方案很简单,但由于某种原因它正在逃避我。
我想要实现的是:如果将 ID(在本例中为 @pbid)传递给存储过程,我只想返回与该参数匹配的单个记录,否则我想返回表中的所有结果。
这是我想出的,它显然不会起作用,因为我正在尝试在 PBID (PBID =)上进行等价评估,并且我希望有条件地做到这一点
where pb.PBID =
CASE WHEN @pbid is not null THEN
@pbid --just return results with this ID
ELSE
is not null --return all results
END
如果它是 C# 或其他东西,我会这样写:
if(intPBID > 0) --parameter set, only return results with that param
{
pb.PBID = intPBID
}
else
{
pb.PBID > 0 --return everything
}
我希望这不会太令人困惑,我会很感激任何反馈。
谢谢
解决方案
我不确定性能影响,但我通常最终会做类似的事情:
SELECT *
FROM table
WHERE (@pbid IS NULL OR pb.PBID = @pbid)