sp_describe_cursor (Transact-SQL)
Gilt für: SQL Server
Meldet die Attribute eines Servercursors.
Transact-SQL-Syntaxkonventionen
Syntax
sp_describe_cursor
[ @cursor_return = ] cursor_return OUTPUT
, [ @cursor_source = ] { N'local' | N'global' | N'*cursor_source*' }
, [ @cursor_identity = ] N'cursor_identity'
[ ; ]
Argumente
[ @cursor_return = ] cursor_return OUTPUT
Der Name einer deklarierten Cursorvariable, um die Cursorausgabe zu empfangen. @cursor_return ist ein OUTPUT-Parameter vom Typ "int" ohne Standard und darf zu dem Zeitpunktsp_describe_cursor
, zu dem Cursor aufgerufen werden, nicht zugeordnet werden. Bei dem zurückgegebenen Cursor handelt es sich um einen scrollfähigen, dynamischen, schreibgeschützten Cursor.
[ @cursor_source = ] { N'local' | N'global' | N'cursor_source' }
Gibt an, ob der gemeldete Cursor mithilfe des Namens eines lokalen Cursors, eines globalen Cursors oder einer Cursorvariable angegeben wird. @cursor_source ist nvarchar(30) ohne Standard.
[ @cursor_identity = ] N'cursor_identity'
Der Name eines Cursors, der von einer DECLARE CURSOR
Anweisung erstellt wurde. @cursor_identity ist nvarchar(128), ohne Standard.
Wenn der Cursor das
LOCAL
Schlüsselwort aufweist oder standardmäßig aufLOCAL
, @cursor_identity istlocal
.Wenn der Cursor das
GLOBAL
Schlüsselwort aufweist oder standardmäßig aufGLOBAL
, @cursor_identity istglobal
. @cursor_identity kann auch der Name eines API-Servercursors sein, der von einer ODBC-Anwendung geöffnet und dann durch AufrufenSQLSetCursorName
benannt wird.Andernfalls ist @cursor_identity der Name einer Cursorvariable, die einem geöffneten Cursor zugeordnet ist.
Rückgabecodewerte
Keine.
Zurückgegebene Cursor
sp_describe_cursor
Kapselt das Resultset in einem Transact-SQL-Ausgabeparameter cursor
. 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 cursor
Ausgabeparameter muss an eine Programmvariable gebunden werden, die Datenbank-APIs unterstützen jedoch keine Bindungsparameter cursor
oder Variablen.
Die folgende Tabelle zeigt das Format des Cursors, der mithilfe sp_describe_cursor
von . Das Format des Cursors entspricht dem von der Verwendung sp_cursor_list
zurückgegebenen Format.
Spaltenname | Datentyp | Beschreibung |
---|---|---|
reference_name |
sysname | Name, der zum Verweisen auf den Cursor verwendet wird. Wenn der Verweis auf den Cursor durch den in einer DECLARE CURSOR Anweisung angegebenen Namen erfolgte, entspricht der Verweisname dem Cursornamen. Wenn der Verweis auf den Cursor über eine Variable erfolgte, ist der Variablenname der Name des Verweises. |
cursor_name |
sysname | Der Name des Cursors aus einer DECLARE CURSOR Anweisung. Wenn der Cursor durch Festlegen einer Cursorvariable auf einen Cursor erstellt wurde, cursor_name wird der Name der Cursorvariable zurückgegeben. In früheren Versionen von SQL Server gibt diese Ausgabespalte einen vom System generierten Namen zurück. |
cursor_scope |
tinyint | 1 = LOCAL 2 = GLOBAL |
status |
int | 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 |
tinyint | 1 = Unempfindlich (oder statisch)2 = Keyset3 = Dynamisch4 = Vorlauf |
concurrency |
tinyint | 1 = Schreibgeschützt2 = Bildlaufsperren3 = Optimistisch |
scrollable |
tinyint | 0 = Nur Vorwärts1 = Bildlauffähig |
open_status |
tinyint | 0 = Geschlossen1 = Öffnen |
cursor_rows |
Dezimalzahl(10;0) | Die Anzahl der kennzeichnenden Zeilen im Resultset. Weitere Informationen finden Sie unter @@CURSOR_ROWS. |
fetch_status |
smallint | Status des letzten Abrufs auf diesem 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 = Beim Cursor ist kein Abruf aufgetreten. |
column_count |
smallint | Anzahl der Spalten im Resultset des Cursors |
row_count |
Dezimalzahl(10;0) | Anzahl der Zeilen, auf die sich den letzten Vorgang für den Cursor auswirkt. Weitere Informationen finden Sie unter @@ROWCOUNT. |
last_operation |
tinyint | Zuletzt ausgeführter 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_describe_cursor
beschreibt die Attribute, die global für einen Servercursor sind, z. B. die Möglichkeit zum Scrollen und Aktualisieren. 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. Verwenden Sie die Verwendung sp_cursor_list
, um einen Bericht über die Transact-SQL-Servercursor abzurufen, die für die Verbindung sichtbar sind.
Eine DECLARE CURSOR
Anweisung kann einen Cursortyp anfordern, den SQL Server nicht mithilfe der SELECT
Anweisung unterstützen kann, die in der DECLARE CURSOR
. SQL Server konvertiert den Cursor implizit in einen Typ, den er mithilfe der SELECT
Anweisung unterstützen kann. Wenn TYPE_WARNING
in der DECLARE CURSOR
Anweisung angegeben wird, sendet SQL Server der Anwendung eine Informationsmeldung, dass eine Konvertierung abgeschlossen wurde. sp_describe_cursor
kann dann aufgerufen werden, um den Typ des Cursors zu bestimmen, der implementiert wurde.
Berechtigungen
Erfordert die Mitgliedschaft in der public -Rolle.
Beispiele
Im folgenden Beispiel wird ein globaler Cursor geöffnet und mithilfe von sp_describe_cursor
ein Bericht der Cursorattribute erstellt.
USE AdventureWorks2022;
GO
-- Declare and open a global cursor.
DECLARE abc CURSOR STATIC FOR
SELECT LastName
FROM Person.Person;
OPEN abc;
-- Declare a cursor variable to hold the cursor output variable
-- from sp_describe_cursor.
DECLARE @Report CURSOR;
-- Execute sp_describe_cursor into the cursor variable.
EXEC master.dbo.sp_describe_cursor
@cursor_return = @Report OUTPUT,
@cursor_source = N'global',
@cursor_identity = N'abc';
-- Fetch all the rows from the sp_describe_cursor output cursor.
FETCH NEXT from @Report;
WHILE (@@FETCH_STATUS <> -1)
BEGIN
FETCH NEXT from @Report;
END
-- Close and deallocate the cursor from sp_describe_cursor.
CLOSE @Report;
DEALLOCATE @Report;
GO
-- Close and deallocate the original cursor.
CLOSE abc;
DEALLOCATE abc;
GO