在另一个存储过程中汇总来自一个存储过程的信息

时间:2012-01-06 23:25:33

标签: sql sql-server sql-server-2008 stored-procedures

我的存储过程不仅庞大,而且内存密集。为详细报告创建第一个存储过程。第二个存储过程调用第一个存储过程,将信息放入临时表,然后从该临时表中选择信息并对其进行汇总。

现在,第二个存储过程不需要详细存储过程中的所有信息,它只需要其中的一部分。

我们的DBA将此方法称为鲁莽,并提出了其他建议,例如“将其保留在真实的表中,以便每天运行一次”。这实际上不会发生,因为许多用户可以每天多次运行报告和不同的日期范围。他的另一个建议是没有临时表的SUM,但我不确定你如何从一个存储过程中只选择某些字段。

我有两个问题:如何在没有临时表的情况下遵循他的第二个SUM建议,如果无法做到,那么是否有人对使用汇总摘要报告所需数据的最佳方法有任何建议?

这两个存储过程都是针对单独的报告。一个是详细信息,另一个是摘要。最终用户可以针对不同的商店和不同的时间段运行它们。

2 个答案:

答案 0 :(得分:1)

为什么不将数据放在视图中并从两个存储过程中点击视图?这将降低两个过程中的复杂性(但将其移至视图中)。

根据您的查询结构,您甚至可以创建一个索引视图,该视图将创建一个持久的数据形式,并允许您使用索引。

答案 1 :(得分:1)

如果在内部SP中选择非常简单 - 尝试@Abe注意到的方法

如果无法在简单视图中显示数据,您有两种方法:

  1. 以不使用内部SP
  2. 获取唯一需要的数据的方式重写外部过程
  3. 仅通过外部临时表或持久表传输所需数据
    • 临时表的好处 - 您可以使用索引而无需维护已经不需要的数据
    • 持久表的好处是一样的,除了你可以更精细地调整它,tan temp table< 你必须打扰桌面清理因此 - 必须引入类似会话密钥到期日期外部清理