我的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之外不返回任何内容)。
答案 0 :(得分:-1)
好的,所以我想出了问题所在。使用=
代替IN
。即使我在语句的后半部分使用IN
,=
强制它评估IN
,就好像它是=
一样。因此,尝试传递多个值会导致错误。
修改了以下声明,现在它可以正常工作。
WHERE (@ProgramID IS NULL or ProgramID IN (@ProgramID))
AND ('<ALL>' IN (@ProgramName)) OR (ProgramName IN (@ProgramName))