不能在where子句</all>中使用<all>

时间:2015-01-29 22:48:12

标签: reporting-services ssrs-2008-r2

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

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

当我从参数中选择2个或更多值时,它总是抛出“在预期条件的上下文中指定的非布尔类型的表达式,接近','”。如果我选择<ALL>它可以正常工作,如果我只选择一个值就可以了。如果我删除@ProgramName = '<ALL>' OR部分,它可以适用于单个或多个值。为什么会发生这种情况,我该如何解决?我需要添加<ALL>,因为内置的(Select All)会导致报告由于传递的值数量而导致运行不佳。

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

1 个答案:

答案 0 :(得分:-1)

好的,所以我想出了问题所在。使用=代替IN。即使我在语句的后半部分使用IN=强制它评估IN,就好像它是=一样。因此,尝试传递多个值会导致错误。

修改了以下声明,现在它可以正常工作。

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