2012-10-20 133 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”,您只需将初始加载行复制到游标循环的末尾,以便在完成后抓取下一行。

相关问题