SQL-Cursor Ergebnis in Endlosschleife

Ich versuche, Rechnungspositionen in die bestehende Rechnung mit negativem Wert für die Menge einzufügen. Ich habe beschlossen, Cursor dafür zu verwenden, aber wenn ich die Abfrage ausführen, ergibt sich eine Endlosschleife.

Hier ist mein Code:

declare @cKey char(13); set @cKey = '1512000000043'; -- declare cursor to get -- all items for specific invoice declare c cursor for select acIdent, anQty from tHE_MoveItem where acKey = @cKey; declare @cIdent char (16), @nQty decimal(19,6), @nNo int, @cStatus varchar(2), @cErrorOut varchar(1024); open c fetch c into @cIdent, @nQty while (@@fetch_status=0) begin -- add all items with negative qty -- to same invoice select @cIdent; -- invert value set @nQty = @nQty *-1; select @nQty; -- insert ident with negative value to invoice EXEC dbo.pHE_MoveItemsCreAll @cKey, @cIdent,@nQty, '', 1, @nNo OUTPUT,@cErrorOut OUTPUT,@cStatus OUTPUT; fetch c into @cIdent, @nQty end close c deallocate c 

Ich verwende SQL server 2008 R2.

Die Prozedur pHE_MoveItemsCreAll setzt Werte in dieselbe Tabelle ein, wie der Cursor aus liest.

Sie müssen Ihren Cursor mit dem static Schlüsselwort declare c cursor static ( declare c cursor static ), um zu verhindern, dass neu eingefügte datasätze zurück zum Cursor geholt werden.

Ein staticer Cursor zeigt immer die Ergebnismenge an, wie es war, als der Cursor geöffnet wurde. In anderen Fällen, wenn Sie Ihre datasätze in die gleiche Tabelle insert und sie erfüllt die Bedingungen der data in Cursor ausgewählt – diese neuen datasätze werden abgerufen und Cursor iteriert wieder.