2

特定の顧客に必要なものを取得するストアド プロシージャが 1 つあります。20行で戻ってきます...

私がしなければならないことは、このストアド プロシージャを 20 人の顧客に対して 1 つ以上呼び出し、結果セット全体を返すことです。私は次のものを持っていますが、ハングして実行中と言うだけです..何が間違っているのだろうか...

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 

また、cursoir は非常に遅いことで知られていることに注意してください。

于 2012-10-20T19:33:42.600 に答える
1

他のループ サイクルと同様に、各サイクルの最後に次の項目に移動する必要があります。そうしないと、無限ループになります。

次のアイテムに移動するためのカーソル命令は「FETCH NEXT」です。最初のロード行をカーソル ループの最後にコピーするだけで済み、終了したら次の行を取得します。

于 2012-10-21T16:09:12.480 に答える