【问题标题】:Multiple Values Parameter with Blank value in SQL Report BuilderSQL 报表生成器中具有空白值的多值参数
【发布时间】:2019-03-04 12:14:15
【问题描述】:

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

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

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

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

当我将@Part 留空或放入 1 个部件号时,它会按预期工作。

当我运行超过 1 个部分时出现错误。错误内容为:“报告处理期间发生错误。(rsProcessingAborted) 数据集“DataSet1”的查询执行失败。 (rsErrorExecutingCommand) 在预期条件的上下文中指定的非布尔类型表达式,靠近 ','。"

这是我认为相关的代码。

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

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

到目前为止我测试过的内容: 将@Part IN ('') 交换为 @Part = ''

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

【问题讨论】:

  • 我也对此进行了测试。 =Join(Parameters!TestCase.Value, ",") 使用它作为参数表达式。也尝试了拆分。

标签: sql-server reportbuilder3.0


【解决方案1】:

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

使用 STRING_SPLIT 函数,您的语句变为:

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

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

更新 您可以找到custom splitter by Jeff Moden 的文章。这是一篇冗长的文章,但最好了解拆分器可能导致的问题。

【讨论】:

  • 感谢韦斯的回复。对于 String_Split,我们的兼容性级别不够高。我不熟悉自定义拆分器功能。那是什么?
  • 我研究了什么是分离器功能。它们听起来很整洁,但我以前从未编写过函数,我不确定这部分。如果我为此制作了一个自定义函数,我的报表生成器是否可以访问?
  • 您需要拥有在数据库中创建函数的权限。报表生成器连接帐户也需要函数的执行权限。我发布的链接应该提供创建它所需的一切。
猜你喜欢
  • 2014-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多