2

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

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。

4

2 回答 2

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
于 2013-06-25T22:39:27.990 回答
1

这可能会做你想要的:

创建表#scratch(CalculatedField1 int,CalculatedField2 int,...)

插入#scratch (exec procA params)

从 #scratch 中选择 sum(CalculatedField1), sum(CalculatedField2),...

删除表#scratch

于 2013-06-25T22:34:07.277 回答