【问题标题】:How to send a Reporting Services multi-value parameter to a SQL Server function?如何将 Reporting Services 多值参数发送到 SQL Server 函数?
【发布时间】:2009-06-05 13:56:33
【问题描述】:

我有一份报告在查询中的“in”语句中使用了多值参数。例如(以@areas 作为多值参数):

select * from regions where areas in (@areas)

它运行良好,但现在我需要将相同的参数发送到 SQL Server 2005 数据库中的函数:

select name, myFunction(@areas) from regions where areas in (@areas)

函数中的@areas 参数也将在“in”语句中使用。我尝试使用 varchar 参数接收它,但这会导致错误。当我使用 SQL Profiler 时,我看到参数是以这种格式传递的:

N''1'',N''2'',N''3''

这里的具体问题是,函数参数@areas必须是什么数据类型?以及如何将该参数用于函数中的“in”语句?

谢谢

【问题讨论】:

标签: sql sql-server reporting-services


【解决方案1】:

一般来说,如果您要将某种类型的列表作为参数传递,您会希望将其作为长度足够大的 varchar 传递以处理整个列表。您也可以将它作为 XML 参数传递,但我一直更喜欢使用 varchar 路由并以这种方式解析它。

【讨论】:

  • TheTXI 虽然我同意你的回答,但它让我想要了解更多细节。 :-) Here's a great post 了解完成工作所需的所有可怕的血腥细节。这真的很可怕,令人费解的是,微软没有更好地预见到这种需求。
【解决方案2】:

对于 sql 2008,有提到的表值参数。否则,您唯一的选择是将其作为打包值传递(varchar 或 xml 中的逗号分隔变量),或者填充临时表并从临时表中读取函数。如果您使用相同的大输入调用多个函数,则临时表可能是最佳途径,因此您不必继续解析它。如果本机输入是 xml(即您有一些来自 facebook 等外部合作伙伴的输入),那么通常最好将其保留为 xml。如果它只是一个适度的整数列表,那么逗号分隔值的列表也不错。

【讨论】:

    【解决方案3】:

    SQL Server 从 2008 版开始支持表值参数: http://www.sqlteam.com/article/sql-server-2008-table-valued-parameters

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多