Sql 合并来自多个存储过程的结果

Sql 合并来自多个存储过程的结果,sql,sql-server-2008,tsql,stored-procedures,Sql,Sql Server 2008,Tsql,Stored Procedures,我有3个存储过程(spData1、spData2、spData3),它们从两个表(TSite、tInspections)中查询区域摘要结果,这两个表由站点ID键链接。由于所需摘要信息的联接方法和分组要求不同,我无法组合查询。每个存储过程都采用一个@Year(smallint)参数来表示它们需要摘要信息的年份。为了让事情变得真正有趣,这些过程并不总是返回相同数量的记录,这取决于年份 spData1返回RegionName、TotalSitesVisited和TotalViolations spDa

我有3个存储过程
(spData1、spData2、spData3)
,它们从两个表
(TSite、tInspections)
中查询区域摘要结果,这两个表由
站点ID
键链接。由于所需摘要信息的联接方法和分组要求不同,我无法组合查询。每个存储过程都采用一个
@Year(smallint)
参数来表示它们需要摘要信息的年份。为了让事情变得真正有趣,这些过程并不总是返回相同数量的记录,这取决于年份

  • spData1返回RegionName、TotalSitesVisited和TotalViolations
  • spData2返回RegionName和TotalSiteVisitions
  • spData3返回RegionName和TotalBadSites
  • 如何创建第四个存储过程以在一个结果中返回所有这些信息:

    spdata 4
    返回
    RegionName、TotalSitesVisited、TotalViolations、TotalSiteVisites、TotalBadSites


    谢谢

    在过程的开头(spData4),创建三个临时表,它们与三个存储过程的输出列相关

    使用
    INSERT..EXEC运行所有3个SP,并将数据插入3个临时表中

    最后,编写一个连接3个临时表结果的查询,并将其作为SELECT from过程返回

    类似这样的内容(针对正确的列类型进行修复):

    或者,如果您不再需要旧SP,您可以在此处从所有三个SP复制代码,并将其作为三个单独的部分,每个部分填充自己的#temp表。以同样的方式在末端连接

    CREATE PROCEDURE spData4 (@Year smallint)
    AS
    BEGIN
    
     CREATE TABLE #temp1 (RegionName NVARCHAR(50), TotalSitesVisited INT, TotalViolations INT)
     CREATE TABLE #temp2 (RegionName NVARCHAR(50), TotalSiteVisits INT)
     CREATE TABLE #temp3 (RegionName NVARCHAR(50), TotalBadSites INT)
    
     INSERT INTO #temp1 EXEC spData1 @Year
     INSERT INTO #temp2 EXEC spData2 @Year
     INSERT INTO #temp3 EXEC spData3 @Year
    
     SELECT 
      COALESCE(t1.RegionName, t2.RegionName, t3.RegionName) RegionName
      ,TotalSitesVisited,TotalViolations,TotalSiteVisits,TotalBadSites 
     FROM #temp1 t1
     FULL JOIN #temp2 t2 ON t1.RegionName = t2.RegionName 
     FULL JOIN #temp3 t3 ON t1.RegionName = t3.RegionName OR t2.RegionName = t3.RegionName
    
    END