不能在 where 子句中使用 <ALL>

Can't use <ALL> in where clause

我的 where 子句中包含以下内容

WHERE (@ProgramID IS NULL or ProgramID IN (@ProgramID))
      AND (@ProgramName = '<ALL>' OR ProgramName IN (@ProgramName))

当我从参数中 select 2 个或更多值时,这总是抛出 "expression of non-boolean type specified in a context where a condition is expected, near ','"。如果我 select 和 <ALL> 它工作正常,如果我 select 只有一个值就很好。如果我删除 @ProgramName = '<ALL>' OR 部分,它适用于单个或多个值。为什么会发生这种情况,我该如何解决?我需要添加 <ALL>,因为内置的 (Select All) 由于传递的值数量而使报告 运行 很差。

我有一个填充参数值的数据集,我向其中添加了一个 UNION,以便该值正确存在(它是一个单值数据集,除了 ProgramName 之外不返回任何内容)。

好的,我知道问题出在哪里了。这是使用 = 而不是 IN。尽管我在语句的后半部分使用了 IN,但 = 强制它对 IN 的求值与对 = 的求值相同。因此,试图向它传递多个值会导致错误。

将语句修改为以下,现在可以正常使用了。

WHERE (@ProgramID IS NULL or ProgramID IN (@ProgramID))
  AND ('<ALL>' IN (@ProgramName)) OR (ProgramName IN (@ProgramName))