sp_describe_cursor_tables (Transact-SQL)
Meldet die Objekte oder Basistabellen, auf die ein Servercursor verweist.
Transact-SQL-Syntaxkonventionen
Syntax
sp_describe_cursor_tables
[ @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_variableOUTPUT
Der Name einer deklarierten Cursorvariablen zum Empfangen der Cursorausgabe. output_cursor_variable ist vom Datentyp cursor, hat keinen Standardwert und darf keinem Cursor zugeordnet sein, wenn sp_describe_cursor_tables aufgerufen wird. 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'
Name eines mit einer DECLARE CURSOR-Anweisung erstellten Cursors, der entweder das LOCAL-Schlüsselwort aufweist oder standardmäßig auf LOCAL festgelegt ist. local_cursor_name ist vom Datentyp nvarchar(128).[ @cursor\_identity= ] N'global_cursor_name'
Name eines mit einer DECLARE CURSOR-Anweisung erstellten Cursors, der entweder das GLOBAL-Schlüsselwort aufweist oder standardmäßig auf GLOBAL festgelegt ist. 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.global_cursor_name ist vom Datentyp nvarchar(128).[ @cursor\_identity= ] N'input_cursor_variable'
Der Name einer Cursorvariablen, die mit einem geöffneten Cursor verknüpft ist. input_cursor_variable ist vom Datentyp nvarchar(128).
Rückgabecodewerte
Keine
Zurückgegebene Cursor
sp_describe_cursor_tables kapselt den Bericht 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-Funktionen aufzurufen. Der cursor-Ausgabeparameter muss an eine Programmvariable gebunden sein, aber die APIs unterstützen die Bindung von cursor-Parametern oder -Variablen nicht.
In der folgenden Tabelle wird das Format des Cursors dargestellt, der von sp_describe_cursor_tables zurückgegeben wird.
Spaltenname |
Datentyp |
Beschreibung |
---|---|---|
table owner |
sysname |
Die Benutzer-ID des Tabellenbesitzers. |
Table_name |
sysname |
Name des Objekts oder der Basistabelle. In SQL Server geben Servercursor immer das vom Benutzer angegebene Objekt und nicht die Basistabellen zurück. |
Optimizer_hints |
smallint |
Bitmapmuster, das sich aus einer oder mehreren der folgenden Optionen zusammensetzt: 1 = Sperre auf Zeilenebene (ROWLOCK) 4 = Sperre auf Seitenebene (PAGELOCK) 8 = Tabellensperre (TABLOCK) 16 = Exklusive Tabellensperre (TABLOCKX) 32 = Updatesperre (UPDLOCK) 64 = Keine Sperre (NOLOCK) 128 = Schnelle erste Zeilenoption (FASTFIRST) 4096 = Wiederholbarer Lesevorgang bei Verwendung mit DECLARE CURSOR (HOLDLOCK) Bei Angabe mehrerer Optionen wird vom System die restriktivste Option verwendet. sp_describe_cursor_tables zeigt jedoch die Flags an, die in der Abfrage angegeben sind. |
lock_type |
smallint |
Explizit oder implizit für die diesem Cursor zugrunde liegenden Basistabellen angeforderter Scrollsperrentyp. Die folgenden Werte sind möglich: 0 = Keine 1 = Freigegeben 3 = Aktualisieren |
server_name |
sysname, nullable |
Der Name des Verbindungsservers, auf dem sich die Tabelle befindet. NULL, wenn OPENQUERY oder OPENROWSET verwendet wird. |
Objectid |
int |
Die Objekt-ID der Tabelle. 0, wenn OPENQUERY oder OPENROWSET verwendet wird. |
dbid |
int |
ID der Datenbank, in der sich die Tabelle befindet. 0, wenn OPENQUERY oder OPENROWSET verwendet wird. |
dbname |
sysname, nullable |
Name der Datenbank, in der sich die Tabelle befindet. NULL, wenn OPENQUERY oder OPENROWSET verwendet wird. |
Hinweise
sp_describe_cursor_tables beschreibt die Basistabellen, auf die ein Servercursor verweist. Mit sp_describe_cursor_columns zeigen Sie eine Beschreibung der Attribute des vom Cursor zurückgegebenen Resultsets an. Verwenden Sie sp_describe_cursor für eine Beschreibung der globalen Cursormerkmale, wie z. B. die Scrolloptionen und die Aktualisierbarkeit. Wenn Sie einen Bericht der in der Verbindung sichtbaren Transact-SQL-Servercursor benötigen, verwenden Sie sp_cursor_list.
Berechtigungen
Erfordert die Mitgliedschaft in der public-Rolle.
Beispiele
In diesem Beispiel wird ein globaler Cursor geöffnet und mithilfe von sp_describe_cursor_tables gemeldet, auf welche Tabellen dieser Cursor verweist.
USE AdventureWorks2012;
GO
-- Declare and open a global cursor.
DECLARE abc CURSOR KEYSET FOR
SELECT LastName
FROM Person.Person
WHERE LastName LIKE 'S%';
OPEN abc;
GO
-- Declare a cursor variable to hold the cursor output variable
-- from sp_describe_cursor_tables.
DECLARE @Report CURSOR;
-- Execute sp_describe_cursor_tables into the cursor variable.
EXEC master.dbo.sp_describe_cursor_tables
@cursor_return = @Report OUTPUT,
@cursor_source = N'global', @cursor_identity = N'abc';
-- Fetch all the rows from the sp_describe_cursor_tables 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_tables.
CLOSE @Report;
DEALLOCATE @Report;
GO
-- Close and deallocate the original cursor.
CLOSE abc;
DEALLOCATE abc;
GO
Siehe auch
Verweis
sp_describe_cursor (Transact-SQL)
sp_describe_cursor_columns (Transact-SQL)
Gespeicherte Systemprozeduren (Transact-SQL)