0

我一直在到处寻找这个问题的答案,但我找不到任何好的答案;

我有一个 .net 应用程序,它具有删除人员(系统中的中心实体)的功能。用户可以通过各种方式过滤可删除的人员集合,然后将符合过滤条件的人员显示在网格中;然后,用户可以选择/取消选择该网格中要删除的个人;

在此之后,但在实际删除这些人之前,我们需要出示这些人的报告,以供审计;

因此,虽然报表将打印人员表中的数据,但我们需要将人员表中存在的预定义人员子集传递到报表中,以便报表显示正确的数据子集。

此处定义的问题仅是指示性的——作为第一个正在处理的此类报告,但任何数量的系统报告都需要能够打印预定义的数据子集。此外,由于系统允许无限用户,因此多个用户有足够的空间同时报告相同的数据,因此在表行上设置标志以指示应选择哪些行不是可行的解决方案。

到目前为止,我能想到的唯一解决方案是动态生成一个 sql 语句来表示在 WHERE 子句中使用“AND Person.ID IN (list)”打印的数据,并将该 sql 语句保存为一系列 8k 块永久表格中的文本;通过 url 将该表行的 ID 传递到报表中,并使报表的数据源成为存储过程,该存储过程使用传递的 ID 作为参数:存储过程使用 ID 查找表中包含所需 sql 的行生成报表的数据,并使用一堆 varchar(8000) 变量整理 sql,执行 sql,并将所需的数据返回给报表。

然而,这很糟糕......如何更干净地完成?

4

1 回答 1

2

为什么不创建具有两列 PersonID 和 ReportID 的 Report 表。每当用户选择人员列表时,您在此表中插入他们的 ID 并生成一个新的 ReportID,并且在您的报告中,您的查询将需要针对此表执行内部联接。

(基本上和你描述的一样,但不那么老套)

如果除了人员列表之外,您还需要其他详细信息(例如要显示的字段),您可以使用相同的方法。

另一种选择是,由于您使用的是 .Net 应用程序,您可以将所有 personID 传递到参数列表(在您的报告上创建一个多值参数),SSRS 将能够处理它。

于 2013-07-03T22:43:37.113 回答