【发布时间】:2016-09-25 02:58:11
【问题描述】:
我使用声明这些参数的现有存储过程:
@Unit varchar(4000),
@BegDate datetime,
@EndDate datetime,
@SortBy varchar(20)
我现在面临的挑战是想出一个存储过程的派生,它接受任意数量的 @Unit 参数,从 1..N
我该怎么做?是否将@Unit 参数更改为@Unit varchar(max),为参数分配分隔值,然后从存储过程中解析分隔值?
IOW,我需要在存储过程中做这样的事情吗:
@Unit varchar(max),
@BegDate datetime,
@EndDate datetime,
@SortBy varchar(20)
...C# 代码中的这个:
string unit = unit1 +',' + unit2 +',' + unit3 // and on for however many units are being added
. . .
sqlCommand.Parameters.AddWithValue("@Unit", unit);
...然后,回到存储过程中,将逗号分隔的值解析为字符串数组并让它像这样查询表(伪 dml):
string[] unitArray = @Unit.Split(',');
. . .
SELECT BLA, BLEE, BLOO FROM F_BUELLER WHERE Unit in unitArray[0], unitArray[1], unitArray[2], // and on for however many units are being queried for
...或什么/如何?
注意:如果这是一个“普通”项目(即非 SSRS),我会简单地使用原始存储过程,多次调用它,然后合并返回的数据,按 Unit 分组。我不知道这是否可能或如何在 rdl/xml 文件中从 SSRS 执行此操作...
更新
这里真正需要发生的是,在每个唯一的“单元”之后有一个分页符,原因是报告被导出到 Excel,请求者希望每个单元在自己的单独工作表中。
所以基本上我需要调用同一个存储过程 N 次,每次都将结果放在它自己的“页面”上。
所以提示here 似乎不错(“您可以在 Reporting Services 中创建多个数据集,然后在报表中的不同元素中使用它们。只需从数据集:数据选项卡上的下拉列表中添加一个”)
不过,饼干的关键是:如何为每个单元提供 1 个且仅 1 个数据集?无法提前知道将生成/需要多少个单元/工作表;可能有几个,可能有几十个。
【问题讨论】:
标签: sql-server stored-procedures reporting-services parameter-passing dml