使用存储过程在 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 中传递多个字符串值的主要内容,如果未能解决你的问题,请参考以下文章
将参数从 ReportViewer 传递到 s-s-rS 报告的存储过程数据源