【问题标题】:Need explanation of how passing SSRS multi-value parameters to SQL works需要解释将 SSRS 多值参数传递给 SQL 的工作原理
【发布时间】:2017-04-25 14:39:58
【问题描述】:

我从不再在公司工作的人那里继承了几份 SSRS 报告。报告将多值参数传递给 SQL 存储过程。然后,该 SP 使用 WHERE 子句中的拆分函数来读取值。在某些参数上,SSRS SP 使用Join(Parameters!field.Value,",") 以便正确地将字符串值传递给 SQL。但它并没有对所有的多值参数执行此操作。

有人可以解释为什么在某些多值参数中需要Join() 而在其他参数中不需要?我最近不得不调试一份没有填充所有数据的报告,发现我需要添加Join()。但没有它,其他报告似乎也能正常工作。

【问题讨论】:

  • 答案在于Join()函数是如何定义的。
  • 你能再具体点吗?
  • 总是使用同一个 SP 吗?我猜想当 SP 执行 SPLIT() 时总是需要 JOIN() ...
  • 它并不总是相同的 SP,但它们看起来并没有太大的不同,它们都使用 SPLIT()。我还认为 JOIN() 总是需要的,但我发现没有 JOIN() 的地方。我想在使用 SPLIT() 时我应该始终使用 JOIN()。

标签: sql-server parameters ssrs-2012 udf


【解决方案1】:

在将多值参数传递给只接受该字段的 1 个参数的存储过程时需要加入。 When only one option from a list is selected no join is required, but when selecting multiple values they need to be joined into a single parameter, passed into the stored procedure, and then split inside the stored procedure.如果需要单独处理不同的值,则只需要在存储过程中拆分一次。

我会推荐阅读this article on passing multi-value parameters to stored procedures

【讨论】:

  • 我仍然不确定为什么某些多值参数使用 Join() 而其他参数不使用。如果用户选择多个值,那么我会期望一个 Join(),但这里并非总是如此。我正在使用的 SP 都以相同的方式编写并且都使用相同的拆分功能。
  • 我需要查看来自 SSRS 的语句和多选的数据类型。
【解决方案2】:

我不确定我是否理解你的问题。为什么不将 SP 更改为 Where IN (@var) 摆脱分裂。

【讨论】:

  • 因为 SSRS 将为多选中选择的每个变量传递一个单独的变量,但存储过程需要特定数量的变量。您可以将变量默认为 null 并将逻辑放入 SP 以忽略 null 变量,但更容易将它们连接起来,将它们作为一个传递,然后在 SP 中拆分它们。
  • 更改 SP 以期望该变量的 varchar(max)。而不是为每个独立值一遍又一遍地运行 sp。
  • 如果你从一个多选中选择了“a”、“b”和“c”并加入它,它作为“a、b、c”传递。现在使用 IN 子句将仅与选定的 ulti-select 值的单个合并值进行比较。在比较 INT 和日期时也很困难。就是 IN ('a, b, c') 和 IN ('a', 'b', 'c') 的区别。
  • 很抱歉我无法提供帮助。它对我有用。但我们并不知道所涉及的所有变量。
  • 安德鲁的解释很到位。我不能只将 IN(@var) 与 SSRS 一起使用。
猜你喜欢
  • 2012-11-18
  • 2020-11-12
  • 2010-11-24
  • 1970-01-01
  • 1970-01-01
  • 2013-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多