SSRS不接受表类型(integer_list_tbltype)作为参数

时间:2012-06-08 16:40:56

标签: sql-server-2008 reporting-services ssrs-2008

我有一个存储过程,其输入参数为integer_list_tbltype。我可以像这样运行proc

DECLARE @mylist integer_list_tbltype
INSERT @mylist(n) VALUES(1),(2),(3),(4)
exec <Proc_Name> @mylist

当我尝试在SSRS(Sql reporting services 2008)下将其添加为共享数据库时,我收到错误。

操作数类型冲突:nvarchar与integer_list_tbltype不兼容

对此有何解决方法?

韦达

2 个答案:

答案 0 :(得分:2)

最近我对同一个问题感到沮丧。我认为这是因为SSRS总是在实际调用报告需要运行的查询时将每个参数作为nvarchar发送。 SQL Server无法正确地将nvarchar解释为您尝试使用的表类型,因此您会收到该错误。

我刚刚在博客中提到了一个潜在的解决方案/解决方法,在调用存储过程之前,您使用自定义代码块填充表变量:

http://geekswithblogs.net/GruffCode/archive/2012/06/21/using-table-valued-parameters-with-sql-server-reporting-services.aspx

答案 1 :(得分:1)

唉,SSRS中的多值参数不能按预期工作,它不像表或类似的东西。

相反,SSRS将使用逗号分隔的所有值列表替换SQL查询中的参数。因此,您的示例将像这样发送到SQL Server:

exec <Proc_Name> 1,2,3,4

在SSRS(see this, for example)中使用多值参数的方法如下:

SELECT * FROM MyNumbers WHERE MyNumbers.Nmbr IN (@mylist)

以SQL地址发送到SQL Server:

SELECT * FROM MyNumbers WHERE MyNumbers.Nmbr IN (1,2,3,4)

PS。您发布的错误消息也可能表示您的参数类型在SSRS中设置为“文本”,您似乎在其中表示“整数”。