sp_describe_cursor (Transact-SQL)
Meldet die Attribute eines Servercursors.
Transact-SQL-Syntaxkonventionen
Syntax
sp_describe_cursor [ @cursor_return = ] output_cursor_variable OUTPUT
{ [ , [ @cursor_source = ] N'local'
, [ @cursor_identity = ] N'local_cursor_name' ]
| [ , [ @cursor_source = ] N'global'
, [ @cursor_identity = ] N'global_cursor_name' ]
| [ , [ @cursor_source = ] N'variable'
, [ @cursor_identity = ] N'input_cursor_variable' ]
}
Argumente
[ @cursor_return = ] output_cursor_variable OUTPUT
Ist der Name einer deklarierten Cursorvariablen, die die Cursorausgabe erhalten soll. output_cursor_variable ist vom Datentyp cursor und hat keinen Standard. Dieser Parameter darf beim Aufruf von sp_describe_cursor_tables keinem Cursor zugeordnet sein. Bei dem zurückgegebenen Cursor handelt es sich um einen scrollfähigen, dynamischen, schreibgeschützten Cursor.
[ @cursor_source = ] { N'local'| N'global' | N'variable' }
Gibt an, ob der Cursor, für den der Bericht erstellt wird, mithilfe des Namens eines lokalen Cursors, eines globalen Cursors oder einer Cursorvariablen angegeben wird. Der Parameter ist nvarchar(30).
[ @cursor_identity = ] N'local_cursor_name' ]
Ist der Name eines mit einer DECLARE CURSOR-Anweisung erstellten Cursors, der entweder das LOCAL-Schlüsselwort aufweist oder standardmäßig auf LOCAL festgelegt wird. local_cursor_name ist vom Datentyp nvarchar(128).
[ @cursor_identity = ] N'global_cursor_name' ]
Ist der Name eines mit einer DECLARE CURSOR-Anweisung erstellten Cursors, der entweder das GLOBAL-Schlüsselwort aufweist oder standardmäßig auf GLOBAL festgelegt wird. global_cursor_name ist vom Datentyp nvarchar(128).
global_cursor_name kann auch der Name eines API-Servercursors sein, der von einer ODBC-Anwendung geöffnet wurde, die den Cursor dann durch den Aufruf von SQLSetCursorName benannt hat.
[ @cursor_identity = ] N'input_cursor_variable' ]
Ist der Name einer Cursorvariablen, die einem geöffneten Cursor zugeordnet ist. input_cursor_variable ist vom Datentyp nvarchar(128).
Rückgabecodewerte
Keine
Hinweise
sp_describe_cursor beschreibt die für einen Servercursor globalen Attribute, wie z. B. die Optionen zum Scrollen und zum Aktualisieren. Mit sp_describe_cursor_columns zeigen Sie eine Beschreibung der Attribute des vom Cursor zurückgegebenen Resultsets an. Mit sp_describe_cursor_tables zeigen Sie an, auf welche Basistabellen der Cursor verweist. Wenn Sie einen Bericht der in der Verbindung sichtbaren Transact-SQL Servercursor benötigen, verwenden Sie sp_cursor_list.
Eine DECLARE CURSOR-Anweisung kann einen Cursortyp anfordern, den SQL Server mithilfe der in DECLARE CURSOR enthaltenen SELECT-Anweisung nicht unterstützen kann. SQL Server konvertiert den Cursor implizit in einen Typ, der mithilfe der SELECT-Anweisung unterstützt werden kann. Wenn TYPE_WARNING in der DECLARE CURSOR-Anweisung angegeben wird, sendet SQL Server der Anwendung eine Meldung zu Informationszwecken, dass eine Konvertierung durchgeführt wurde. sp_describe_cursor kann dann aufgerufen werden, um den implementierten Cursortyp zu bestimmen.
Berechtigungen
Setzt die Mitgliedschaft in der public-Rolle voraus.
Zurückgegebene Cursor
sp_describe_cursor kapselt das Resultset in einen cursor-Ausgabeparameter von Transact-SQL. Dies ermöglicht, dass Transact-SQL-Batches, gespeicherte Prozeduren und Trigger die Ausgabe zeilenweise verwenden können. Dies bedeutet außerdem, dass es nicht möglich ist, die Prozedur direkt über API-Datenbankfunktionen aufzurufen. Der cursor-Ausgabeparameter muss an eine Programmvariable gebunden sein, doch unterstützen die Datenbank-APIs die Bindung von cursor-Parametern oder -Variablen nicht.
In der folgenden Tabelle wird das Format des Cursors dargestellt, der mithilfe von sp_describe_cursor zurückgegeben wird. Das Format des Cursors ist mit dem mithilfe von sp_cursor_list zurückgegebenen Format identisch.
Spaltenname | Datentyp | Beschreibung |
---|---|---|
reference_name |
sysname |
Name, der zum Verweisen auf den Cursor verwendet wird. Wenn der Verweis auf den Cursor über den Namen in einer DECLARE CURSOR-Anweisung erfolgte, ist der Name des Verweises mit dem Cursornamen identisch. 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. In SQL Server 2005 gibt cursor_name den Namen der Cursorvariablen zurück, falls der Cursor durch Festlegen einer Cursorvariablen auf einen Cursor erstellt wurde. In früheren Versionen von SQL Server gibt diese Ausgabespalte einen systemgenerierten Namen zurück. |
cursor_scope |
tinyint |
1 = LOCAL 2 = GLOBAL |
status |
int |
Einige Werte, die von der CURSOR_STATUS-Systemfunktion gemeldet werden: 1 = Der Cursor, auf den mit dem Cursornamen oder der Variablen verwiesen wird, ist geöffnet. Ein statischer, Keyset- oder Insensitivcursor weist mindestens eine Zeile auf. Bei einem dynamischen Cursor weist das Resultset keine oder mehr Zeilen auf. 0 = Der Cursor, auf den mit dem Cursornamen oder der Variablen verwiesen wird, ist geöffnet, hat aber keine Zeilen. Dynamische Cursor geben diesen Wert nie zurück. -1 = Der Cursor, auf den mit dem Cursornamen oder der Variablen verwiesen wird, ist 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 Cursorvariablen wurde kein Cursor zugeordnet. |
model |
tinyint |
1 = Insensitiv (oder statisch) 2 = Keyset 3 = Dynamisch 4 = Schneller Vorlauf |
concurrency |
tinyint |
1 = Schreibgeschützt 2 = Scrollsperren 3 = Vollständig |
scrollable |
tinyint |
0 = Vorwärts 1 = Scrollfähig |
open_status |
tinyint |
0 = Beendet 1 = Offen |
cursor_rows |
decimal(10,0) |
Die Anzahl der kennzeichnenden Zeilen im Resultset. Weitere Informationen finden Sie unter @@CURSOR_ROWS (Transact-SQL). |
fetch_status |
smallint |
Der Status des letzten Abrufs für diesen Cursor. Weitere Informationen finden Sie unter @@FETCH_STATUS (Transact-SQL). 0 = Abruf erfolgreich -1 = Abruf fehlgeschlagen oder außerhalb des zulässigen Bereichs des Cursors -2 = Die angeforderte Zeile fehlt -9 = Kein Abruf für Cursor |
column_count |
smallint |
Anzahl der Spalten im Resultset des Cursors |
row_count |
decimal(10,0) |
Anzahl der Zeilen, auf die sich den letzten Vorgang für den Cursor auswirkt. Weitere Informationen finden Sie unter @@ROWCOUNT (Transact-SQL). |
last_operation |
tinyint |
Der zuletzt ausgeführte Vorgang für den Cursor: 0 = Für den Cursor wurden keine Vorgänge durchgefü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 |
Beispiele
Im folgenden Beispiel wird ein globaler Cursor geöffnet und mithilfe von sp_describe_cursor
ein Bericht der Cursorattribute erstellt.
USE AdventureWorks;
GO
-- Declare and open a global cursor.
DECLARE abc CURSOR STATIC FOR
SELECT LastName
FROM Person.Contact
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
Siehe auch
Verweis
CURSOR_STATUS (Transact-SQL)
DECLARE CURSOR (Transact-SQL)
sp_cursor_list (Transact-SQL)
sp_describe_cursor_columns (Transact-SQL)
sp_describe_cursor_tables (Transact-SQL)