【问题标题】:Writing a query that will handle three different labels编写将处理三个不同标签的查询
【发布时间】:2019-03-21 17:09:58
【问题描述】:

我有 3 个不同的下拉选项。如果我一次选择一个选项,它会起作用,但选择多个选项时会引发错误。这三个标签指的是三个不同的版本。一切正常,但是当我在下拉菜单中选择多个选项时,它会崩溃。需要帮助了解原因

三个参数是 全选: 报告1 报告2 报告3

这是我的查询:

SELECT
  ServerInfo.Version,
  ServerInfo.Type,
  ProjInfo.ProjName,
  ServerInfo.ServName
FROM
  ProjInfo, ServerInfo
WHERE ServerInfo.Version LIKE('%'+@ServerReport+'%')

',' 附近的语法不正确。

数据集“报告”的查询执行失败。 (rsErrorExecutingCommand)

报告处理过程中发生错误。 (rsProcessingAborted)

【问题讨论】:

  • 问题与选角有关吗?或者我应该为每个标签选项写下单独的案例陈述?
  • 请提供更多信息,三个标签值是什么?它填充什么变量,ServerReport?当您选择 1 个或多个选项时,该变量的值是多少?

标签: sql reporting-services ssrs-2012


【解决方案1】:

The problem here is that the query is expecting a single string value, but the report is sending it an array of values when there are multiples selected.

  1. 在数据集属性的参数选项卡中,像这样更新表达式:

    ="," & Join(Parameters!ServerReport.Value, ",") & ","

    这会将选定的值组合成一个逗号分隔的字符串。

  2. 像这样更新您的 WHERE 子句:

    @ServerReport like '%,' + ServerInfo.Version + ',%'

这允许它扫描参数字符串中的版本字符串。连接参数和like 语句外部的逗号可防止它无意中匹配部分字符串。

说明: 这一切都假设您实际上首先需要like 语句。通常你会说:

ServerInfo.Version IN (@ServerReport)

这将接受多个值而无需任何其他更改。但字符串必须完全匹配。

【讨论】:

  • ServerReport 中的三个标签是 Report1 Report2 Report3。 Report 1 设置为 10 , Report2 设置为 13 , Report3 设置为 14 。由于数据库中有三个不同的版本,以这三个值开头。例如,版本设置为 10.12.12。这就是我使用 Like 条件的原因
  • 我尝试了这个解决方案,但它根本没有填充任何结果。我是否需要为每个报告值使用 case 条件?
  • 如果您搜索报告 1 (10),它不会返回类似 9.10、10.10、13.10 和 14.10 的结果吗?您的预期结果是什么?
  • 我的预期结果应该是:Report1(标签值设置为 10)。它应该显示以 10 开头的版本结果。例如 10.20.10 、10.34.10。如果选择了 Report1,我基本上是在尝试进行比较,显示所有以 10 开头的结果。如果选择了 report2,则显示所有结果为 13
  • 好的,像这样设置你的WHERE子句来搜索版本号中的第一组数字:@ServerReport like '%' + LEFT(ServerInfo.Version, CHARINDEX('.', ServerInfo.Version) - 1) + '%'
猜你喜欢
  • 2014-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-06
  • 1970-01-01
  • 2016-11-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多