不能在 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))
我的 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))