【问题标题】:ssrs user typing in multiple values in a parameter or leaving it blankssrs 用户在参数中输入多个值或将其留空
【发布时间】:2017-03-30 15:35:52
【问题描述】:

我正在 SSRS 中创建报告,并有一个参数供最终用户搜索帐号。在报告中,该参数默认设置为 null 以显示所有帐户。当参数不为空时,用户应该能够输入单个帐户或多个帐户,以逗号分隔。我的问题是当我尝试输入多个帐户时出现此错误:

“在预期条件的上下文中指定的非布尔类型的表达式,靠近 ','。”

这是我的 sql 查询:

SELECT * FROM test_db WHERE (AccountNumber IN (@Account)) OR (@Account IS NULL)

@Account 参数上的代码是

=IIF(IsNothing(Parameters!Account.Value),Parameters!Account.Value,Split(Parameters!Account.Value,","))

【问题讨论】:

  • @Account 是如何声明的?
  • SELECT * FROM test_db WHERE (AccountNumber IN (@Account)) OR (AccountNumber IS NULL) 你可能是这个意思。在 OR 中使用 AccountNumber 而不是 @Account
  • @Account 是 SSRS 中的数据类型 Text 和数据库中的 varchar(30)。我尝试根据您的建议调整 sql 查询,但是当参数为空时它不会显示所有帐户
  • 您需要使用动态 SQL。类似 .. exec ('select * from test_db where (AccountNumber in (' + @Account + ')) OR AccountNumber IS NULL' )
  • 是逗号分隔的吗?如果是这样,您需要将其拆分以执行 In 语句。

标签: sql reporting-services split ssrs-2012


【解决方案1】:

你不需要对它做任何事情。如果您将@Account 参数设为多值,您只需键入每个条目,然后按[Enter],没有逗号,只需您需要的值,在参数下拉列表的每一行中输入一个。

然后你的原始查询将起作用,SSRS 会自动将多值列表转换为逗号分隔的列表并将其注入到你的 SQL 中。如果这没有意义,请告诉我,我会用一些图片给出完整的答案。您可能需要将查询更改为

SELECT * 
    FROM test_db 
    WHERE AccountNumber IN (@Account) 
        OR ISNULL(@Account, '' ) = ''

这也将处理空白。所以空白/Null 应该返回所有内容

【讨论】:

  • 我正在输入帐户并按回车键,但我仍然收到相同的错误:“isnull 函数需要 2 个参数”。我可以搜索 1 个帐户,如果我将其留空,我将返回所有帐户。我只是无法让多个帐户工作。我也确实更改了我的查询 - 一旦我编辑它,SSRS 确实将其更改为以下内容。 SELECT * FROM test_db WHERE (UtilityAccountNumber IN @Account)) OR (ISNULL(@Account, '') = '')
  • 你能发布你的数据集查询吗?正如您从我发布的代码 sn-p 中看到的那样,ISNULL 函数正在获取两个参数,它获取 @Account 然后是一个空字符串(两个单引号 ''),所以它应该可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-10
  • 1970-01-01
相关资源
最近更新 更多