sys.sp_describe_cursor_tables (Transact-SQL)

Si applica a:SQL Server

Crea un report degli oggetti o delle tabelle di base a cui fa riferimento un cursore del server.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

sys.sp_describe_cursor_tables
    [ @cursor_return = ] cursor_return OUTPUT
    , [ @cursor_source = ] { N'local' | N'global' | N'*cursor_source*' }
    , [ @cursor_identity = ] N'cursor_identity'
[ ; ]

Argomenti

[ @cursor_return = ] cursor_return OUTPUT

Nome di una variabile di cursore dichiarata per ricevere l'output del cursore. @cursor_return è un OUTPUTcursore, senza impostazione predefinita, e non deve essere associato a nessun cursore al momento sp_describe_cursor_tables in cui viene chiamato. Il cursore restituito è di tipo scorrevole, dinamico e di sola lettura.

[ @cursor_source = ] { N'local' | N'global' | N'cursor_source' }

Specifica se il cursore di cui viene generato il report viene specificato utilizzando il nome di un cursore locale, di un cursore globale o di una variabile di cursore. @cursor_source è nvarchar(30), senza impostazione predefinita.

[ @cursor_identity = ] N'cursor_identity'

Quando LOCAL

Quando GLOBAL @cursor_identity può anche essere il nome di un cursore del server API aperto da un'applicazione ODBC che ha quindi denominato il cursore chiamando SQLSetCursorName.

Quando @cursor_source è variable, @cursor_identity è il nome di una variabile di cursore associata a un cursore aperto.

@cursor_identity è nvarchar(128), senza impostazione predefinita.

Valori del codice restituito

Nessuno.

Cursori restituiti

sp_describe_cursor_tablesincapsula il report come parametro di output del cursore Transact-SQL. In questo modo, i batch Transact-SQL, le stored procedure e i trigger possono funzionare con l'output di una riga alla volta. Ciò significa anche che la procedura non può essere chiamata direttamente dalle funzioni API. Il parametro di output del cursore deve essere associato a una variabile di programma, ma le API non supportano parametri o variabili del cursore di associazione.

Nella tabella seguente viene illustrato il formato del cursore restituito da sp_describe_cursor_tables.

Nome colonna Tipo di dati Descrizione
table_owner sysname ID utente del proprietario della tabella.
table_name sysname Nome dell'oggetto o della tabella di base. In SQL Server i cursori del server restituiscono sempre l'oggetto specificato dall'utente, non le tabelle di base.
optimizer_hint smallint Bitmap costituita da una o più delle opzioni seguenti:

1 = Blocco a livello di riga (ROWLOCK)
4 = Blocco a livello di pagina (PAGELOCK)
8 = Blocco tabella (TABLOCK)
16 = Blocco di tabella esclusivo (TABLOCKX)
32 = Blocco di aggiornamento (UPDLOCK)
64 = Nessun blocco (NOLOCK)
128 = Opzione di prima riga veloce (FASTFIRST)
4096 = Semantica ripetibile di lettura se usata con DECLARE CURSOR (HOLDLOCK)

Se si specificano più opzioni, il sistema utilizza l'opzione più restrittiva. Mostra tuttavia sp_describe_cursor_tables i flag specificati nella query.
lock_type smallint Tipo di blocco di scorrimento richiesto in modo esplicito o implicito per ogni tabella di base sottostante del cursore. Il valore può essere una delle opzioni seguenti:

0 = Nessuna
1 = Condiviso
3 = Aggiornamento
server_name sysname, nullable Nome del server collegato contenente la tabella. NULL quando OPENQUERY o OPENROWSET vengono usati.
objectid int ID di oggetto della tabella. 0 quando OPENQUERY o OPENROWSET vengono utilizzati.
dbid int ID del database in cui risiede la tabella. 0 quando OPENQUERY o OPENROWSET vengono utilizzati.
dbname sysname, nullable Nome del database contenente la tabella specificata. NULL quando OPENQUERY o OPENROWSET vengono usati.

Osservazioni:

sp_describe_cursor_tables descrive le tabelle di base a cui fa riferimento un cursore del server. Per una descrizione degli attributi del set di risultati restituito dal cursore, utilizzare sp_describe_cursor_columns. Per una descrizione delle caratteristiche globali del cursore, ad esempio la possibilità di scorrimento e l'updatabilità, usare sp_describe_cursor. Per ottenere un report dei cursori transact-SQL server visibili nella connessione, usare sp_cursor_list.

Autorizzazioni

È richiesta l'appartenenza al ruolo public .

Esempi

Nell'esempio seguente viene aperto un cursore globale e viene sp_describe_cursor_tables utilizzato per creare report sulle tabelle a cui fa riferimento il cursore.

USE AdventureWorks2022;
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 AS CURSOR;

-- Execute sp_describe_cursor_tables into the cursor variable.
EXECUTE 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