Freigeben über


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 auf LOCAL, @cursor_identity ist local.

  • Wenn der Cursor das GLOBAL Schlüsselwort aufweist oder standardmäßig auf GLOBAL, @cursor_identity ist global. @cursor_identity kann auch der Name eines API-Servercursors sein, der von einer ODBC-Anwendung geöffnet und dann durch Aufrufen SQLSetCursorNamebenannt 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_cursorvon . Das Format des Cursors entspricht dem von der Verwendung sp_cursor_listzurü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 = Keyset
3 = Dynamisch
4= Vorlauf
concurrency tinyint 1 = Schreibgeschützt
2 = Bildlaufsperren
3 = Optimistisch
scrollable tinyint 0 = Nur Vorwärts
1 = Bildlauffähig
open_status tinyint 0 = Geschlossen
1 = Ö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