2012-10-20 184 views
2

我有一個存儲過程,我得到我想要的特定客戶的存儲過程。它回來了20行...調用另一個存儲過程的存儲過程掛起很長時間

我需要做的是調用此存儲過程的20個客戶一個或多個,然後返回整個結果集。我有以下的,但它只是掛起並說執行。我不知道我有什麼錯?

ALTER PROCEDURE [dbo].[getAllTotals] -- This stored procedure is new 
@pDt1 datetime, @pDt2 datetime, @pStore int 
AS 
BEGIN 
    DECLARE @AccountTbl table (AccountID int); 
    DECLARE @TotalTbl table (AccountID int, col1 varchar(100), col2 varchar(100)); 

    DECLARE @accountID int 

    --cache all accountid INTO cursor AccountID_cursor 
    DECLARE AccountID_cursor CURSOR FOR 
     SELECT Storeid 
     FROM tblStore 
     WHERE StoreID = 111 OR storeid = 933 

    OPEN AccountID_cursor; 

    FETCH NEXT FROM AccountID_cursor INTO @accountID; 

    WHILE @@FETCH_STATUS = 0 
    BEGIN  
     --insert total amount info to tmp table @TotalTbl 
     insert @TotalTbl 
     EXEC [dbo].[rptTransactions06192012_royal] 
       @pDt1 = @pDt1, @pDt2 = @pDt2, @pStore = @accountID 
    END 

    --Send temp table results to front end as. 
    SELECT * FROM @TotalTbl 
END 

這是否有意義?

預先感謝!!

安娜

回答

2

您從不指示光標抓住下一行。

FETCH NEXT FROM AccountID_cursor INTO @accountID; 
WHILE @@FETCH_STATUS = 0 

BEGIN 

    --insert total amount info to tmp table @TotalTbl 

insert @TotalTbl 

    EXEC [dbo].[rptTransactions06192012_royal] 
    @pDt1 = @pDt1, 
    @pDt2 [email protected], 
    @pStore = @accountID 

FETCH NEXT FROM AccountID_cursor INTO @accountID; 

END 

此外,請記住,cursoirs是臭名昭着的緩慢。

+0

謝謝!我應該看到的! –

1

與任何循環週期一樣,您需要在每個循環結束時移動到下一個項目,否則將會出現無限循環。

對於移動到下一項的遊標指令是「FETCH NEXT」,您只需將初始加載行復制到遊標循環的末尾,以便在完成後抓取下一行。

相關問題