Freigeben über


@@FETCH_STATUS (Transact-SQL)

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance

Diese Funktion 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.

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.
–9 Der Cursor führt keinen Abrufvorgang aus.

Hinweise

Da @@FETCH_STATUS global für alle Cursor bei einer Verbindung gilt, verwenden Sie dies mit Bedacht. Nachdem eine FETCH-Anweisung ausgeführt wurde, muss der Test für @@FETCH_STATUS durchgeführt werden, bevor eine weitere FETCH-Anweisung für einen anderen Cursor ausgeführt wird. @@FETCH_STATUS wird erst definiert, wenn ein Abrufvorgang für die 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

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

DECLARE Employee_Cursor CURSOR FOR  
SELECT BusinessEntityID, JobTitle  
FROM AdventureWorks2022.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  

Siehe auch

Cursorfunktionen (Transact-SQL)
FETCH (Transact-SQL)