我一直在到处寻找这个问题的答案,但我找不到任何好的答案;
我有一个.net应用程序,它具有删除人员(系统中的中央实体)的功能。用户可以通过多种方式对可以删除的人员集进行过滤,过滤后符合过滤条件的人员会显示在网格中,用户可以在该网格中选择/取消选择需要删除的个人;
在此之后,但在实际删除人员之前,我们需要显示这些人员的报告,以便进行审计;
因此,虽然报表将打印Persons表中的数据,但我们需要将Persons表中存在的预定义人员子集传递到报表中,以便报表显示正确的数据子集。
这里定义的问题仅是指示性的-是正在解决的第一个此类报告,但任何数量的系统报告都需要能够打印预定义的数据子集。此外,由于系统允许无限制的用户,因此多个用户可以同时报告相同的数据,因此在表行上设置标志来指示应该选择哪些行不是一个可行的解决方案。
到目前为止,我能想到的唯一解决方案是动态生成一条sql语句来表示在WHERE子句中使用“AND Person.ID IN (list)”打印的数据,并将该sql语句作为一系列8k文本块保存在一个永久表中;通过url将该表行的ID传递到报表中,并使报表的数据源成为存储过程,该存储过程使用传递的ID作为参数:存储过程使用ID在表中查找包含生成报表数据所需的sql的行,并使用一组varchar(8000)变量来整理sql,执行sql,然后将所需的数据返回给报表。
然而,这是相当讨厌的.怎样才能做得更干净呢?
发布于 2013-07-04 06:43:37
为什么不创建包含两列PersonID和ReportID的报告表。当用户选择人员列表时,您将在此表上插入他们的ID并生成一个新的ReportID,并且在您的报表上,您的查询将需要对此表执行一个内部联接。
(本质上与您所描述的相同,但不那么繁琐)
如果除了人员列表之外,您还需要其他详细信息(例如要显示哪些字段),则可以使用相同的方法。
另一种替代方法是,由于您使用的是.Net应用程序,因此可以将所有的personIDs传递给参数列表(在报表上创建一个多值参数),SSRS将能够处理它。
https://stackoverflow.com/questions/17459048
复制相似问题