首页 > 解决方案 > 语句中带有运算符的条件 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
}

我希望这不会太令人困惑,我会很感激任何反馈。

谢谢

标签: sqlsql-servertsql

解决方案


我不确定性能影响,但我通常最终会做类似的事情:

SELECT *
FROM table
WHERE (@pbid IS NULL OR pb.PBID = @pbid)

推荐阅读