Reset @@FETCH_STATUS gespeicherte Prozedur
Wie kann ich zurücksetzen der @@FETCH_STATUS variable oder setzen Sie ihn auf 0 in einer gespeicherten Prozedur?
Außerdem können Sie binden FETCH_STATUS zu einem bestimmten cursor?
- Können Sie uns erklären, warum dieses Verhalten gewünscht werden würde? Vielleicht hat die community lösen kann Ihren Bedarf in einer anderen Weise.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin in der Lage zu reproduzieren, die
@@FETCH_STATUS
Problem, das Sie beschreiben, ist dies, sobald SieDECLARE
eineCURSOR
und iterieren durch die Zeilen durch Aufruf vonFETCH NEXT
bis Ihr@@FETCH_STATUS = -1
.Dann, auch wenn Sie
CLOSE
undDEALLOCATE
den cursor, wenn Sie anrufen, dassCURSOR
zurück@@FETCH_STATUS = -1
und wenn Ihr stützend einen loop-Bedingung auf die@@FETCH_STATUS <> -1
, die Schleife wird nie ausgeführt.Meine Lösung war im Grunde sagen die
CURSOR
zurück zu gehen, umFIRST
ändern der@@FETCH_STATUS
zurück0
, dann beenden. Beachten Sie, dass man aktivieren muss, umCURSOR
zu scrollen, indem Sie das SchlüsselwortSCROLL
nach derCURSOR
Namen, wenn Sie ihn deklarieren.Hier ist ein Beispiel. Ich habe drei Spalten aus einer orderitems (Elemente, die Menschen platziert Aufträge für die) Tabelle, um meinen cursor:
Dies sind die Ergebnisse:
Den cursor ausgeführt werden können, immer und immer und Produkt die gleichen Ergebnisse jedes mal.
Können Sie es zurücksetzen, indem man eine der cursor nicht am Ende der Tabelle.
Müssen Sie schließen Sie den cursor, und Öffnen Sie dann den cursor wieder.
Ein Alter thread ich weiß, aber eine Antwort, die an anderer Stelle gefunden, die für mich gearbeitet wurde:
Können Sie nicht:
Also im Grunde ist es nicht gebunden cursor.
Als Sklivvz schrieb Sie nicht.
Aber ich Frage mich, warum wollen Sie es zurücksetzen?
Was ist das eigentliche problem?
In der Regel haben Sie eine @@FETCH_STATUS sofort nach HOLEN, also warum würden Sie wollen, um es zurückzusetzen?
Versuchen, speichern das Ergebnis in eine temporäre variable, wenn Sie nicht sofort auswerten.
Wenn Sie möchten, zu brechen, cursor, die Sie verwenden können PAUSE
Aber dieses nur ersetzen-Funktion von 0 bis 1.
Hatte ich das, was ich dachte, war ein zurücksetzen müssen mein cursor.
Ich war dabei einige Tests mit Cursor und ich kam immer wieder zurück mit einem @@fetch_status sein = -1, auch nachdem ich hatte kodiert eine enge und Freigabe der cursor war ich testen.
Hatte was passiert war hatte ich eröffnet einen globalen cursor in einem anderen Verfahren nach einem logischen test und nie geschlossen, dass der cursor nach Durchlaufen es.
Also der Fetch war zu sehen, die @@Fetch_status der cursor.
Schließen Sie Ihren Cursor deallocate Ihrem Cursor.