获取另一个存储过程的结果摘要

时间:2013-06-25 22:26:46

标签: sql-server-2008 stored-procedures

我有一个复杂的存储过程,它返回一些带有一些计算值的行

SELECT  CalculatedField1 ,
        CalculatedField2 ,
        ...
FROM ...
WHERE CONDITION

这个sproc(让我们称之为procA)返回可变数量的行,具体取决于WHERE条件。这很好用。我现在需要做的是编写一个存储过程来获取这些返回行的摘要。

-- procB
SELECT SUM(CalculatedField1),
SELECT SUM(CalculatedField2),
       ...
FROM (EXEC procA params)

这可能吗?

编辑:创建临时表完成了这项工作,但是我在传递输出参数时遇到了问题。

CREATE PROCEDURE [dbo].[sprocB] (@prm INT = NULL OUTPUT)
AS
BEGIN
SET NOCOUNT ON;

    SET @prm = 1

    SELECT Id FROM dbo.AnyTable
END

CREATE PROCEDURE [dbo].[sprocA] (@prm INT = NULL OUTPUT)
AS
BEGIN
SET NOCOUNT ON;

    CREATE TABLE #temp (Id INT)

    INSERT INTO #temp
    EXEC sprocB @prm

    SELECT Id FROM #temp
END

执行:

USE [MyDatabase]
GO

DECLARE @return_value int,
    @prm int

EXEC    @return_value = [dbo].[sprocA]
    @prm = @prm OUTPUT

SELECT  @prm as N'@prm'

SELECT  'Return Value' = @return_value

GO

临时表的结果正常,结果集被正确检索,但@pem值仍为NULL。

2 个答案:

答案 0 :(得分:2)

这是可能的,但你需要一个辅助表:

CREATE PROCEDURE procB
AS

declare @table table (CalculatedField1 int, CalculatedField12 int)

insert into @table
EXEC sp_a

select SUM(CalculatedField1), SUM(CalculatedField2)
from @table

GO

答案 1 :(得分:1)

这可能会做你想要的:

  

create table #scratch(CalculatedField1 int,CalculatedField2 int,...)

     

插入#scratch(exec procA params)

     

选择sum(CalculatedField1),sum(CalculatedField2),...来自#scratch

     

drop table #scratch

相关问题