使用存储过程在 s-s-rS 中传递多个字符串值

Posted

技术标签:

【中文标题】使用存储过程在 s-s-rS 中传递多个字符串值【英文标题】:passing Multiple string values in s-s-rS using stored procedure 【发布时间】:2013-02-28 15:41:08 【问题描述】:

我对存储过程以及将它们与 s-s-rS 一起使用相当陌生。

我想使用带有允许多个值的参数的存储过程创建一个简单的 s-s-rS 报告(来自单独的过程的结果)

我有 2 个简单的存储过程如下。

Create Procedure WO
@STARTDATE datetime, @ENDDATE datetime, @DISTRICT varchar(25)
AS
SELECT A.WO, A.CUST, A.DISTRICT, A.COMPL_DATE
FROM WORK_ORDERS A
WHERE A.COMPL_DATE between (@STARTDATE) and (@ENDDATE) 
and A.DISTRICT_NAME in (@DISTRICT)

Create Procedure DISTRICT
AS
SELECT B.DISTRICT_NAME
FROM DISTRICTS B

在我的 s-s-rS 报告中,我使用“DISTRICT”参数和 DISTRICT 程序中的可用值(允许多个值)使用 DISTRICT 程序的结果来报告 WO 程序。我还在 WO 程序的参数中使用了 DISTRICT 参数。

这在选择一个区时有效,但在我选择多个区时无效。有人愿意帮忙吗?

【问题讨论】:

【参考方案1】:

如果我没记错的话,问题在于处理字符串参数@district - 假设选择了 4 个区,s-s-rS 传递的内容可能看起来像“N,S,E,W” - 然后存储的过程将出来为: ...A.District_Name in ('N,S,E,W')... 只有在有一个地区名称 'N,S,E,W' 时才会返回一个值。因此,我认为您需要拆分传入的值并将其重新组合为“N”、“S”、“E”、“W”。不幸的是,SQL Server 中没有 SPLIT 函数,因此您要么必须编写 UDF(有几个帖子可用),要么进行 CLR 调用。

这是一个聪明(未经测试)的想法 - 尝试 Replace(@District,',',''',''') (我想我的引号是对的......)

【讨论】:

以上是关于使用存储过程在 s-s-rS 中传递多个字符串值的主要内容,如果未能解决你的问题,请参考以下文章

s-s-rS 中的多个报告使用相同的存储过程

将参数从 ReportViewer 传递到 s-s-rS 报告的存储过程数据源

来自存储过程的多个结果集的 s-s-rS 最佳实践

如何使用 s-s-rS 中的 URL 访问传递带有特殊字符的多个参数

将 s-s-rS 报告中的多个页面呈现为单个页面

带参数的 s-s-rS 中的 Exec Base 过程