4

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

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

当我尝试在 SSRS(Sql 报告服务 2008)下将其添加为共享数据库时,出现错误。

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

有什么解决方法吗?

韦德

4

2 回答 2

2

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

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

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

于 2012-06-22T02:25:43.700 回答
1

唉,SSRS 中的多值参数不能像您预期的那样工作,它的行为不像表格或类似的东西。

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

exec <Proc_Name> 1,2,3,4

在 SSRS 中使用多值参数的方法(例如,参见 this)如下:

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

发送到 SQL Server 为:

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

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

于 2012-06-16T13:25:31.177 回答