【问题标题】:SSRS not accepting table type (integer_list_tbltype) as parameterSSRS 不接受表类型 (integer_list_tbltype) 作为参数
【发布时间】:2012-06-08 16:40:56
【问题描述】:

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

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

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

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

有什么解决方法吗?

韦德

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      唉,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 Server 的格式为:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-07-02
        • 1970-01-01
        • 2012-06-02
        • 1970-01-01
        • 2021-04-12
        • 2021-10-18
        • 2015-03-21
        相关资源
        最近更新 更多