SQL 报表生成器中具有空白值的多值参数



我有一个报告,我需要能够显示 1 个必需参数的所有值,或者能够在可选参数中键入一组值。

第一个参数(必填(:制造商。

第二个参数(可选(:将该制造商的所有零件留空,或者能够输入5 +不同的零件号并仅显示这些零件。

我无法使用可用值列表,因为我的数据库中有 100,000 个或更多部件。如果没有使用可用值的解决方法,我不能将 Null 与多个值一起使用。我在我的研究中看到了那个。最终用户不希望子查询拉出部分 # 的列表供他们进行排序以选择他们想要的内容。

当我@Part留空或输入 1 个零件号时,它可以按预期工作。

当我让它与超过 1 个部件一起运行时,我收到错误。 错误显示:"报表处理过程中出错。(rs处理中止( 数据集"数据集 1"的查询执行失败。(rsErrorExecutingCommand( 在需要条件的上下文中指定的非布尔类型的表达式,靠近','。

这是我认为相关的代码。

(SELECT branch, mfg, part
FROM partact
WHERE mfg IN (@Mfg) AND 
(part IN (@Part) OR @Part IN (''))) a

它是较大查询的一部分,但较大的查询似乎工作正常,因为它在空白时工作并且有 1 部分。

到目前为止我测试过的内容: 将 @Part IN ("( 换成 @Part = ">

以几种方式交换括号。它像现在设置的那样处理得很好。

要处理逗号分隔的字段,您需要使用函数将字符串拆分为单独的行。

使用 STRING_SPLIT 函数,您的语句将更改为:

(part IN (SELECT  TRIM(value) FROM  STRING_SPLIT(@Part, ',')) OR @Part = '')

如果 SQL Server 是 2016/Compatability 130 或更高版本,则可以使用内置的 STRING_SPLIT 函数。 否则,您将需要使用自定义拆分器函数,但一般语句将是相同的。

更新您可以找到杰夫·莫登(Jeff Moden(对自定义拆分器的文章。 这是一篇很长的文章,但最好了解拆分器可能导致的问题。

最新更新