我有一个存储过程,其输入参数为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不兼容
对此有何解决方法?
韦达
答案 0 :(得分:2)
最近我对同一个问题感到沮丧。我认为这是因为SSRS总是在实际调用报告需要运行的查询时将每个参数作为nvarchar发送。 SQL Server无法正确地将nvarchar解释为您尝试使用的表类型,因此您会收到该错误。
我刚刚在博客中提到了一个潜在的解决方案/解决方法,在调用存储过程之前,您使用自定义代码块填充表变量:
答案 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中设置为“文本”,您似乎在其中表示“整数”。