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 OUTPUT-Parameter vom Typ int. Der Cursor ist ein bildlauffähiger, dynamischer, schreibgeschützter 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 = Keyset3 = Dynamisch4 = Vorlauf |
concurrency |
smallint | 1 = Schreibgeschützt2 = Bildlaufsperren3 = Optimistisch |
scrollable |
smallint | 0 = Nur Vorwärts1 = Bildlauffähig |
open_status |
smallint | 0 = Geschlossen1 = Ö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