Freigeben über


sp_cursor_list (Transact-SQL)

Gilt für: SQL Server

Meldet die Attribute der Servercursor, die aktuell für die Verbindung geöffnet sind.

Transact-SQL-Syntaxkonventionen

Syntax

sp_cursor_list
    [ @cursor_return = ] cursor_return OUTPUT
    , [ @cursor_scope = ] cursor_scope
[ ; ]

Argumente

[ @cursor_return = ] cursor_return OUTPUT

Der Name einer deklarierten Cursorvariable. @cursor_return ist ein AUSGABEparameter vom Typ CURSOR. Bei dem Cursor handelt es sich um einen scrollfähigen, dynamischen, schreibgeschützten Cursor.

[ @cursor_scope = ] cursor_scope

Gibt die Ebene der Cursor an, die gemeldet werden sollen. @cursor_scope ist int, ohne Standard und kann einer dieser Werte sein.

Wert Beschreibung
1 Alle lokalen Cursor melden.
2 Alle globalen Cursor melden.
3 Lokale und globale Cursor melden.

Rückgabecodewerte

Keine.

Zurückgegebene Cursor

sp_cursor_list gibt den Bericht als Ausgabeparameter für Transact-SQL-Cursor zurück, nicht als Resultset. Dadurch können Transact-SQL-Batches, gespeicherte Prozeduren und Trigger gleichzeitig mit der Ausgabe arbeiten. Dies bedeutet auch, dass die Prozedur nicht direkt aus Datenbank-API-Funktionen aufgerufen werden kann. Der Cursorausgabeparameter muss an eine Programmvariable gebunden werden, die Datenbank-APIs unterstützen jedoch keine Bindungscursorparameter oder Variablen.

Dies ist das Format des Cursors, der von sp_cursor_list. Das Format des Cursors entspricht dem format, das von sp_describe_cursor.

Spaltenname Datentyp Beschreibung
reference_name sysname Der Name, der zum Verweisen auf den Cursor verwendet wird. Wenn der Verweis auf den Cursor den namen einer DECLARE CURSOR Anweisung durchlaufen hat, entspricht der Verweisname dem Cursornamen. Wenn der Verweis auf den Cursor über eine Variable erfolgte, ist der Verweisname der Name der Cursorvariablen.
cursor_name sysname Der Name des Cursors aus einer DECLARE CURSOR Anweisung. Wenn der Cursor in SQL Server durch Festlegen einer Cursorvariable auf einen Cursor erstellt wurde, cursor_name wird der Name der Cursorvariable zurückgegeben. In früheren Versionen gibt diese Ausgabespalte einen systemgenerierten Namen zurück.
cursor_scope smallint 1 = LOCAL
2 = GLOBAL
status smallint Dieselben Werte wie von der CURSOR_STATUS Systemfunktion gemeldet:

1 = Der Cursor, auf den der Cursorname oder die Variable verweist, ist geöffnet. Wenn der Cursor nicht beachtet, statisch oder keyset ist, ist er mindestens eine Zeile. Bei einem dynamischen Cursor weist das Resultset keine oder mehr Zeilen auf.

0 = Der Cursor, auf den der Cursorname oder die Variable verweist, ist geöffnet, hat jedoch keine Zeilen. Dynamische Cursor geben diesen Wert nie zurück.

-1 = Der Cursor, auf den der Cursorname oder die Variable verweist, wird geschlossen.

-2 = Gilt nur für Cursorvariablen. Der Variablen ist kein Cursor zugewiesen. Möglicherweise hat ein OUTPUT Parameter der Variablen einen Cursor zugewiesen, aber die gespeicherte Prozedur hat den Cursor vor der Rückgabe geschlossen.

-3 = Ein Cursor oder eine Cursorvariable mit dem angegebenen Namen ist nicht vorhanden, oder der Cursorvariable ist kein Cursor zugewiesen.
model smallint 1 = Unempfindlich (oder statisch)
2 = Keyset
3 = Dynamisch
4= Vorlauf
concurrency smallint 1 = Schreibgeschützt
2 = Bildlaufsperren
3 = Optimistisch
scrollable smallint 0 = Nur Vorwärts
1 = Bildlauffähig
open_status smallint 0 = Geschlossen
1 = Öffnen
cursor_rows int Die Anzahl von qualifizierenden Zeilen im Resultset. Weitere Informationen finden Sie unter @@CURSOR_ROWS.
fetch_status smallint Der Status des letzten Abrufs für diesen Cursor. Weitere Informationen finden Sie unter @@FETCH_STATUS:

0 = Erfolgreich abrufen.
-1 = Fetch failed or is beyond the bounds of the cursor.
-2 = Die angeforderte Zeile fehlt.
-9 = Der Cursor wurde nicht abgerufen.
column_count smallint Die Anzahl von Spalten im Resultset des Cursors.
row_count smallint Die Anzahl von Zeilen, auf die sich der letzte Vorgang für den Cursor auswirkt. Weitere Informationen finden Sie unter @@ROWCOUNT.
last_operation smallint Der zuletzt ausgeführte Vorgang für den Cursor:

0 = Für den Cursor wurden keine Vorgänge ausgeführt.
1 = OPEN
2 = FETCH
3 = INSERT
4 = UPDATE
5 = DELETE
6 = CLOSE
7 = DEALLOCATE
cursor_handle int Ein eindeutiger Wert für den Cursor innerhalb des Serverbereichs.

Hinweise

sp_cursor_list erstellt eine Liste der aktuellen Servercursor, die von der Verbindung geöffnet werden, und beschreibt die Attribute global für jeden Cursor, z. B. die Bildlaufbarkeit und Die Aktualität des Cursors. Die durch sp_cursor_list Folgendes aufgelisteten Cursor:

  • Transact-SQL-Servercursor.

  • API-Servercursor, die von einer ODBC-Anwendung geöffnet werden, die dann aufgerufen SQLSetCursorName wird, um den Cursor zu benennen.

Wird für eine Beschreibung der Attribute des resultsets verwendet sp_describe_cursor_columns , die vom Cursor zurückgegeben werden. Wird sp_describe_cursor_tables für einen Bericht der Basistabellen verwendet, auf die der Cursor verweist. sp_describe_cursor meldet die gleichen Informationen wie sp_cursor_list, aber nur für einen angegebenen Cursor.

Berechtigungen

Die Ausführungsberechtigungen erhält standardmäßig die public -Rolle.

Beispiele

Im folgenden Beispiel wird ein globaler Cursor geöffnet und mithilfe von sp_cursor_list ein Bericht der Cursorattribute erstellt.

USE AdventureWorks2022;
GO

-- Declare and open a keyset-driven cursor.
DECLARE abc CURSOR KEYSET
FOR
SELECT LastName
FROM Person.Person
WHERE LastName LIKE 'S%';

OPEN abc;

-- Declare a cursor variable to hold the cursor output variable
-- from sp_cursor_list.
DECLARE @Report CURSOR;

-- Execute sp_cursor_list into the cursor variable.
EXEC master.dbo.sp_cursor_list
    @cursor_return = @Report OUTPUT,
    @cursor_scope = 2;

-- Fetch all the rows from the sp_cursor_list output cursor.
FETCH NEXT from @Report;
WHILE (@@FETCH_STATUS <> -1)
BEGIN
    FETCH NEXT from @Report;
END

-- Close and deallocate the cursor from sp_cursor_list.
CLOSE @Report;
DEALLOCATE @Report;
GO

-- Close and deallocate the original cursor.
CLOSE abc;
DEALLOCATE abc;
GO