2013-06-25 121 views
2

我已經與某些計算值獲得的結果的彙總從另一個存儲過程

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

這個存儲過程返回一些行一個複雜的存儲過程(可以稱之爲PROCA)返回可變數量的行,這取決於WHERE條件。這工作正常。我現在需要做的是編寫一個存儲過程,以獲得這些返回行的摘要。

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

這可能嗎?

編輯:創建臨時表做了這項工作,但我有傳遞輸出pareters的問題。

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 

從臨時表中的結果是OK,結果集正確檢索,但是@pem值仍然是NULL。

回答

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 
+0

我有一個輸出參數的問題。查看問題中的更新。 – Goran

1

這可能會做你想要什麼:

創建表#scratch(CalculatedField1 INT,CalculatedField2 INT,...)

INSERT INTO #scratch(EXEC PROCA PARAMS)

選擇總和(CalculatedField1),總和(CalculatedField2),...從#scratch

DROP TABLE #scratch

+0

我有輸出參數有問題。查看問題中的更新。 – Goran

+0

您需要使用臨時表(#tablename)而不是表變量(@tablename)。表變量不能用在INSERT EXEC或SELECT INTO語句中。 http://support.microsoft.com/kb/305977/en-us –

+0

嗨凱瑟琳,我得到了同樣的結果從聲明表變量和創建臨時表。在這兩種情況下,我都會得到這些數據,但輸出參數不起作用。 – Goran

相關問題