【问题标题】:SSRS Parameter not accepting multiple valuesSSRS 参数不接受多个值
【发布时间】:2015-01-30 23:59:12
【问题描述】:

我正在尝试创建一个参数,该参数将接受报表的多个值。如果我只选择一个收集操作,报告会运行一个过程并且可以工作,但是当我尝试选择多个时,我得到:

An error has occurred during report processing.
Query execution failed for dataset 'proc_Incentives'
Error converting data type nvarchar to int

在我的程序中,我将@CO_ID int 声明为一个变量。

在 WHERE 子句中,我在 (@CO_ID) 中设置了 CO.CodeID。

此外,CO.CodeID 以 INT 形式存储在数据库中。

在我的 SSRS 报告中,我创建了一个名为“prmCollectionOp”的新数据集,并在其中编写了一个简单的查询:

Select CodeID, Description from IDViewCollectionOp Order by Description;

然后我创建了一个名为“CO_ID”的新参数,并将数据类型设为整数并选中“允许多个值”。

在“可用值”下,我选择了从查询中获取值,选择 prmCollectionOp 并将 CodeID 放在值字段中,将描述放在标签字段中。

对于默认值,我还选择了从查询中获取值并选择数据集 prmCollectionOp,其值字段为 CodeID。

这一切都适用于选择一个单一的收集操作,但不适用于多个。

关于允许在参数中选择多个值的任何建议?

谢谢,

【问题讨论】:

    标签: parameters ssrs-2008 parameter-passing


    【解决方案1】:

    我知道这是一个棘手的问题:我将推荐几篇解释如何做到这一点的文章。

    一个来自Scott Murray,另一个来自Jeff Moden(Scott 实际上是指他的 Jeff 的文章)。

    对于存储过程,您可以执行以下操作

    斯科特解释说:

    首先,我们将串联的多值参数作为单个实体传递,并且我们使用 varchar 参数(它必须足够大以接受可能选择的所有参数的最大长度)。接下来使用拆分器函数,解析出这些值并将其放入临时表#YEAR_LIST。最后,年份标准从 where 子句的一部分转移到连接的一部分。

    还有其他方法,但这应该可以解决问题。

    希望这会有所帮助!

    【讨论】:

    • 感谢 Bactos,我通过 Google 找到了第一个并尝试了它,但运气不佳,但我会回去再试一次。
    • 我在过程数据集上为应该接受多个值的变量添加了一个表达式:=Join(Parameters!CO_ID.Value,",") 但这不起作用...呃。
    • 您是否尝试过使用拆分功能?您可以将其与递归 CTE 一起使用:sqlservercentral.com/blogs/querying-microsoft-sql-server/2013/…codeproject.com/Tips/666620/T-SQL-Most-Practical-Split-Function 因为当您使用存储过程并将参数传递给该过程时,它将作为 1 值传入(无论您认为有多少值)你必须把它们分开。
    • 好的。我从来没有使用过这个,所以我必须阅读这些文章,看看我是否能弄清楚如何调用这个函数。您是否在为报告收集数据的过程中调用它?
    • 你可以从你正在使用的存储过程中调用它。
    【解决方案2】:

    只需使用带逗号分隔符的连接多值参数(Dataset->Paremeter->Expression)

    在存储过程中,通过 delimiter(,) 分割输入值。然后使用 cross apply 处理查询中的值

    【讨论】:

    • 谢谢 Ezhil,你能和我分享一下如何做到这一点:在存储过程中,通过 delimiter(,) 分割输入值吗?
    • 通过分隔符将组合输入传递到存储过程(例如usp_process(input varchar(max))。然后开发拆分字符串表值返回函数。之后使用交叉应用加入函数通过这个url如何创建表值拆分字符串函数sqlservercentral.com/blogs/querying-microsoft-sql-server/2013/…查询会select * from table a cross apply splitstring(input,',')
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多