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

那有意义吗?

预先感谢!!

安娜

4

2 回答 2

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 =@pDt2,
    @pStore   = @accountID

FETCH NEXT FROM AccountID_cursor INTO @accountID;

END 

另外,请记住,光标速度非常慢。

于 2012-10-20T19:33:42.600 回答
1

与任何循环周期一样,您需要在每个循环结束时移至下一个项目,否则将是无限循环。

对于移动到下一项的游标指令是“FETCH NEXT”,您只需将初始加载行复制到游标循环的末尾,这样它就会在完成后抓取下一行。

于 2012-10-21T16:09:12.480 回答