【问题标题】:SQL Server Report Builder 3 using SQL IN operator with parameter not workingSQL Server Report Builder 3 使用带有参数的 SQL IN 运算符不起作用
【发布时间】:2017-08-21 21:49:44
【问题描述】:

我正在尝试在单个列上使用 IN 运算符过滤 SSRS 中的数据集。当我添加多个值时,它会失败。

为简单起见,这是我的 SQL 语句,不包括其他过滤器以专注于新问题。

SELECT * FROM vActivityDetailed WHERE Category IN (@Category)

@Category 受数据集属性下的覆盖表达式影响。

=Split(Parameters!Category.Value, ",")

我没有使用多值参数,而是将其视为单个值,并希望通过拆分,SSRS 应该像这样执行。

C# - ASP.NET 代码

string categoryString = "Expenses, Misc, Accounts-Receivable";
paramPayType.Name = "Category";
paramPayType.Values.Add((categoryString!= "" ? categoryString : null));

SSRS 最终 SQL 执行(预期)

SELECT * FROM vActivityDetailed WHERE Category IN ('Expenses', 'Misc', 'Accounts-Receivable')

由于我使用 SQL Server Management Studio 直接在 SQL 上对此进行了测试,因此我知道上面的 SQL 应该可以工作,因为它返回记录,但是在 SSRS 中应用时它会失败并显示 An error has occurred during report processing. (rsProcessingAborted)

【问题讨论】:

  • 您是否尝试过跟踪通过您的应用程序发送到您的服务器的 SQL 查询文本?
  • @niktrs 不确定您的意思,因为查询文本是在 SQL 报表服务器上生成的,而我在 ASP.NET 应用程序中拥有的唯一控件是发送参数。我可以在发送之前查看每个参数的值,但在那之后,我能看到的最多的是 SQL 报告服务器数据库上的错误日志,它显示了发送的每个参数,它在错误日志中看起来是正确的。

标签: c# sql asp.net reporting-services split


【解决方案1】:

选择多个值时,SSRS中的参数值是一个字符串数组。 Split 函数将单个字符串作为其参数。您不能将 Split 与数组一起使用。带有 SQL Server 的 SSRS 会为您处理值的拆分,因此您应该能够直接传递参数。

如果您出于某种原因需要实际拆分值,我建议您使用自定义 SQL 函数。如果你搜索一下,会有很多例子。

【讨论】:

  • 他说得对,你根本不需要修改参数。删除您的“覆盖表达式”,它应该可以工作。
  • 你是对的。在过去的几个小时里,我一直在对此进行测试,并发现无论我如何构建 @Category 参数,它都无法与 IN 语句一起使用。我发现使用多值工作完美无缺,现在的问题是试图弄清楚如果没有提供类别,如何做所有事情。感谢您的回答。
猜你喜欢
  • 2016-03-03
  • 1970-01-01
  • 2020-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多