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

时间:2014-07-08 14:17:21

标签: sql sql-server stored-procedures reporting-services ssrs-2008

我正在使用SSRS 2008,并希望就处理多个结果集的最佳做法提出一些建议。

我有一个存储过程,它返回4个相关数据的结果集,但是每个结果集都返回了不同数量的记录。当然在SSRS中只处理了第一个结果集,所以我留下了2个选项,据我所知:

  1. 创建4个不同的存储过程,返回4个不同的数据集
  2. 将所有4个结果集插入临时表并返回该表中的结果。
  3. 第一个选项的问题是4个结果全部来自相同的基本数据(进入临时表),然后与其他表/数据连接/分组。因此,将它们拆分为单独的存储过程似乎会比单个sproc对DB造成更大的压力。

    第二种方法的问题是我必须将相同的数据集包含在SSRS中4次,每次拉出结果集的不同部分并过滤掉正确列上的空值。

    例如,假设我有4个结果集,每个结果集返回4列,每列4个记录。前4列和前4个记录与第一个结果集相关(其余列为空)。第二个结果集仅填充5-8列和5-8等记录

    问题是,哪种方式更有效?在SSRS中多次使用多个存储过程或1个存储过程?谢谢!

1 个答案:

答案 0 :(得分:0)

听起来数据检索是更昂贵的操作,所以你可能只希望这样做一次。 (虽然我不确定你会“强调”SQL Server,但如果这是数据源:那时基本数据和连接/分组数据可能会在内存中,因此如果不同的存储过程可能不会发生额外的物理读取重读数据。)

考虑具有多个实体的实体框架LINQ-to-SQL查询INCLUDEd:结果集的形状非常宽,每个实体的每个字段都有一列。但这避免了每个包含实体的数据库之旅。

除非你的报告有数百个页面或者是渲染或处理密集型,否则我认为选项#2可能效率更高。

您是否能够查看SSRS执行日志中的执行统计信息?我总是使用 ExecutionLog3 视图,并检查 TimeDataRetrieval 的时间,而不是 TimeProcessing TimeRendering

修改

我知道包括链接在内的人不赞成,但我不想包含我没有创建的可能受版权保护的内容。

请参阅检查查询发送到数据库的查询 <{3}}部分,了解LINQ-to-SQL查询的示例,其中包含 ... Departments.Include ( “人”)。包含( “课程”)。请特别注意 Text Visualizer 的图片,它显示了构造的查询:它类似于您的选项#2,因为多个实体包含在同一结果集中。