SQL-cursor-fetch-status Bedeutung
Ich verstehe nicht den Sinn der folgenden Zeilen:
WHILE 1 = 1
BEGIN
FETCH NEXT FROM SomeCursor INTO @SomeId, @SomeOtherColumn
IF @@FETCH_STATUS <> 0 BREAK
Was sind die Bedeutungen von 1=1? und wenn die fetch-status anders als 0?
Dank
InformationsquelleAutor Volkan | 2015-10-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
1=1 ist nur ein kurzer Zustand, der immer true zurück, das heißt, loop forever (gut, bis Sie brechen aus ihm heraus anderswo).
Als für die hol-status-Werte, wie üblich MSDN ist dein Freund hier. Von https://msdn.microsoft.com/en-us/library/ms187308.aspx
E. g. wenn Sie etwas anderes als 0 ist, etwas schief gelaufen ist, so gibt es keinen Punkt in der Weiterbildung.
On a side note, MSDN stellt fest, dass eine ältere Sache, die
@@FETCH_STATUS
ist global, und daher, wo mehrere Cursor verwendet werden, es ist nicht zu trauen. Stattdessen lookup Ihrem cursor die einzelnen fetch-status Wert aus dersys.dm_exec_cursors
dynamic management-Funktion.InformationsquelleAutor Bridge
WHILE 1=1
ist der Beginn einer Schleife und führt immer zu einemTRUE
Ergebnis, so dass die loop-start (und potenziell ewig so weitergehen):@@FETCH_STATUS
Punkte, wenn es noch Zeilen geholt werden (oder wurden geholt) aus dem cursor.Wenn es noch Zeilen, die abgerufen werden können von der cursor, dann
@@FETCH_STATUS
ist 0, was zeigt, ERFOLG.Wenn
@@FETCH_STATUS
ist <> 0 (-1 oder -2), dann zeigt es, dass es keine weiteren Zeilen mehr zurückgegeben werden können aus dem cursor, und Sie haben Ihr Ende erreicht.Dies ist die übliche Bedingung nutzte die Pause, um aus einer Schleife, die sich über einen cursor.
Genauso wie @Lamak kommentiert, hier ist die Dokumentation für @@FETCH_STATUS.
InformationsquelleAutor Radu Gheorghiu
Dies ist ein trick, der Häufig verwendet, um zu vermeiden, schreiben die
FETCH NEXT
line zweimal im code. Es beginnt eine endlos-Schleife überWHILE 1 = 1
und wird fortgesetzt, bis die@@FETCH_STATUS
gibt etwas anderes als 0, was anzeigt, dass es entweder das Ende erreicht der cursor, oder ein Fehler aufgetreten ist.Mögliche
@@FETCH_STATUS
Werte sind:InformationsquelleAutor Siyual