Freigeben über


@@FETCH_STATUS (Transact-SQL)

Gibt den Status der letzten Cursor-FETCH-Anweisung zurück, die für einen beliebigen der aktuell von der Verbindung geöffneten Cursor ausgegeben wurde.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

@@FETCH_STATUS

Rückgabetyp

integer

Rückgabewert

Rückgabewert

Beschreibung

0

Die FETCH-Anweisung war erfolgreich.

-1

Die FETCH-Anweisung ist fehlgeschlagen, oder die Zeile war außerhalb des Resultsets.

-2

Die abgerufene Zeile fehlt.

Hinweise

Da @@FETCH_STATUS global für alle Cursor bei einer Verbindung gilt, verwenden Sie @@FETCH_STATUS vorsichtig. Nachdem eine FETCH-Anweisung ausgeführt wurde, muss der Test von @@FETCH_STATUS durchgeführt werden, bevor eine weitere FETCH-Anweisung für einen anderen Cursor ausgeführt wird. Der Wert von @@FETCH_STATUS ist undefiniert, bis ein Abrufvorgang auf der Verbindung ausgeführt wurde.

Ein Benutzer führt z. B. eine FETCH-Anweisung von einem Cursor aus durch und ruft dann eine gespeicherte Prozedur auf, die die Ergebnisse von einem anderen Cursor aus öffnet und verarbeitet. Wenn die Steuerung von der aufgerufenen gespeicherten Prozedur zurückgegeben wird, spiegelt @@FETCH_STATUS die letzte in der Prozedur ausgeführte FETCH-Anweisung wider und nicht die FETCH-Anweisung, die vor dem Aufruf der gespeicherten Prozedur ausgeführt wurde.

Um den letzten FETCH-Status eines bestimmten Cursors abzurufen, führen Sie eine Abfrage der fetch_status-Spalte in der dynamischen Verwaltungsfunktion sys.dm_exec_cursors durch.

Beispiele

Im folgenden Beispiel wird @@FETCH_STATUS zur Steuerung der Cursoraktivitäten in einer WHILE-Schleife verwendet.

DECLARE Employee_Cursor CURSOR FOR
SELECT BusinessEntityID, JobTitle
FROM AdventureWorks2008R2.HumanResources.Employee;
OPEN Employee_Cursor;
FETCH NEXT FROM Employee_Cursor;
WHILE @@FETCH_STATUS = 0
   BEGIN
      FETCH NEXT FROM Employee_Cursor;
   END;
CLOSE Employee_Cursor;
DEALLOCATE Employee_Cursor;
GO