2010-10-10 8 views
5

Was passiert, wenn ein Fehler während auftritt:T-sql Cursor, was passiert im Fehlerfall?

  1. Deklarieren eines Cursors
  2. Abfragen von Daten

Was passiert, wenn der Fehler auftritt, bevor der Cursor geschlossen wird? Schließt es automatisch?

Wenn ich einen Cursor verwende, was ist die beste Vorgehensweise zur Fehlerbehandlung?

Antwort

1

Wenn nach dem Deklarieren des Cursors ein Fehler auftritt und die Stapelverarbeitung beendet wird, bleibt der Cursor geöffnet. Der Cursor wird geschlossen, nachdem die Verbindung geschlossen wurde.

Wenn Sie den Fehler erfassen können, empfiehlt es sich, den Cursor als Teil der Fehlerbehandlung zu schließen.

2

mit einer besseren Lösung aktualisiert kann

Die [CURSOR_STATUS][1]-Funktion verwendet werden, um den Zustand eines Cursors zu überprüfen.

In SQL 2005 und höher kann dies in einen TRY...CATCH Block verpackt werden.
So etwas wie

BEGIN TRY 

    DECLARE <cursorName>... CURSOR FOR 
    ...cursor statement, fetch block, close & deallocate 

END TRY 
BEGIN CATCH 

    IF (CURSOR_STATUS('global', '<cursorName>') > -2) 
    DEALLOCATE dbCursor 

    ...other error handling 

END CATCH 
+1

Wann kommt der Cursor geschlossen, wenn kein Fehler ist? –

+0

Aktualisiert mit einer besseren Lösung; Auch versucht, das Beispiel klarer zu machen –

+0

Warum> -2? Ich denke, Sie möchten es schließen, wenn status> = 0 ist. – Trevor

Verwandte Themen