2017-07-10 31 views
0

我有一个参数@Year和@Month在我的报告,其中一个月分配了类似的一月(标签)值:1(值),2月:2,... 我datased由具有筛选存储过程feeded enter image description here如何选择SSRS中的所有参数值?

WHERE (cal.CalendarYear = @Year) AND (cal.MonthId = @Month) 

当我检查 '允许乘法值' 中的参数设置,它返回一个错误

误差变换数据类型为nvarchar转换成int。

如何我可以选择所有值(默认)?

+0

您的过程不能接受多个值。你应该改写它或重新设计你的报告不要使用这个程序,但代码 – sepupic

+0

@sepupic如何实现? –

+1

'@ Year'和'@ Month'都是int类型吗?如果你想让它们接受多个值,它们需要是varchar,然后你需要分割它们并改变'WHERE'子句。 – Rokuto

回答

0

当您选择多个值时,将该参数作为带有Join()的表达式传递给过程。

enter image description here

然后在你的程序中改变你的一个月参数是类型为nvarchar(最大)。

创建一个临时表,并使用T-SQL分割字符串函数(谷歌这一点,有这么多的品种,但如果你坚持,我们可以找到一个)将字符串分割成表。然后在你的程序中内部加入你的表格以筛选选择。

0

约“为nvarchar转换成int”你的错误信息表明您的SSRS的参数和你MonthId柱之间的数据类型不匹配。检查前者的报表参数属性 - >常规 - >数据类型以及后者的表格模式,并确保它们都是text/varchar或两个整数。

允许查询处理多个参数值应该比需要使用连接和分裂要简单得多。只需使用IN而不是=,并将您的参数名称放在一组括号内。

AND (cal.MonthId IN (@Month)) 

要设置参数的默认值,请转至报告参数属性 - >默认值。选择Specify values选项,并将您的号码1-12添加为单独的值记录。

1

如果您不需要使用存储过程,则可以轻松解决问题。

从您的存储过程(不包括PROC定义,只是主代码)复制SQL,并粘贴在作为您的数据集查询。

更改= @Year= @MonthIN(@Year)IN(@Month)

这一切就是这么简单,没有加入,分裂或其他任何东西。

SSRS将为您正确插入逗号分隔值的参数值。