Condividi tramite


sp_cursor_list (Transact-SQL)

Si applica a: SQL Server

Restituisce gli attributi dei cursori del server aperti per la connessione corrente.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

sp_cursor_list
    [ @cursor_return = ] cursor_return OUTPUT
    , [ @cursor_scope = ] cursor_scope
[ ; ]

Argomenti

[ @cursor_return = ] cursor_return OUTPUT

Nome di una variabile di cursore dichiarata. @cursor_return è un parametro OUTPUT di tipo int. Il cursore è un cursore scorrevole, dinamico e di sola lettura.

[ @cursor_scope = ] cursor_scope

Specifica il livello dei cursori da segnalare. @cursor_scope è int, senza impostazione predefinita e può essere uno di questi valori.

valore Descrizione
1 Restituisce tutti i cursori locali.
2 Restituisce tutti i cursori globali.
3 Restituisce i cursori locali e quelli globali.

Valori del codice restituito

Nessuno.

Cursori restituiti

sp_cursor_list restituisce il report come parametro di output del cursore Transact-SQL, non come set di risultati. In questo modo è possibile usare batch Transact-SQL, stored procedure e trigger con l'output di una riga alla volta. Significa anche che la procedura non può essere chiamata direttamente dalle funzioni API del database. Il parametro di output del cursore deve essere associato a una variabile di programma, ma le API di database non supportano parametri o variabili del cursore di associazione.

Questo è il formato del cursore restituito da sp_cursor_list. Il formato del cursore è uguale al formato restituito da sp_describe_cursor.

Nome colonna Tipo di dati Descrizione
reference_name sysname Nome utilizzato per fare riferimento al cursore. Se il riferimento al cursore è stato eseguito tramite il nome specificato in un'istruzione DECLARE CURSOR , il nome del riferimento corrisponde al nome del cursore. Se il riferimento al cursore è stato impostato tramite una variabile, il riferimento corrisponde al nome della variabile di cursore.
cursor_name sysname Nome del cursore da un'istruzione DECLARE CURSOR . In SQL Server, se il cursore è stato creato impostando una variabile di cursore su un cursore, cursor_name restituisce il nome della variabile di cursore. Nelle versioni precedenti questa colonna di output restituisce un nome generato dal sistema.
cursor_scope smallint 1 = LOCAL
2 = GLOBAL
status smallint Gli stessi valori riportati dalla funzione di CURSOR_STATUS sistema:

1 = Il cursore a cui fa riferimento il nome del cursore o la variabile è aperto. Se il cursore non fa distinzione, statica o keyset, è almeno una riga. Se invece è dinamico, contiene zero o più righe.

0 = Il cursore a cui fa riferimento il nome del cursore o la variabile è aperto ma non contiene righe. I cursori dinamici non restituiscono mai questo valore.

-1 = Il cursore a cui fa riferimento il nome del cursore o la variabile è chiuso.

-2 = Si applica solo alle variabili di cursore. Alla variabile non è assegnato alcun cursore. Possibilmente, un OUTPUT parametro ha assegnato un cursore alla variabile, ma la stored procedure ha chiuso il cursore prima di restituire.

-3 = Non esiste una variabile cursore o cursore con il nome specificato oppure la variabile del cursore non dispone di un cursore allocato.
model smallint 1 = Senza distinzione (o statico)
2 = Keyset
3 = Dinamico
4 = Avanzamento rapido
concurrency smallint 1 = Sola lettura
2 = Blocchi di scorrimento
3 = Ottimistica
scrollable smallint 0 = Solo inoltro
1 = Scorrevole
open_status smallint 0 = Chiuso
1 = Apri
cursor_rows int Numero di righe del set di risultati. Per altre informazioni, vedere @@CURSOR_ROWS.
fetch_status smallint Stato dell'ultimo recupero del cursore. Per altre informazioni, vedere @@FETCH_STATUS:

0 = Recupero riuscito.
-1 = Recupero non riuscito o oltre i limiti del cursore.
-2 = La riga richiesta è mancante.
-9 = Non è stato eseguito alcun recupero sul cursore.
column_count smallint Numero di colonne nel set di risultati del cursore.
row_count smallint Numero di righe modificate dopo l'ultima operazione eseguita sul cursore. Per altre informazioni, vedere @@ROWCOUNT.
last_operation smallint Ultima operazione eseguita sul cursore:

0 = Nessuna operazione eseguita sul cursore.
1 = OPEN
2 = FETCH
3 = INSERT
4 = UPDATE
5 = DELETE
6 = CLOSE
7 = DEALLOCATE
cursor_handle int Valore univoco che identifica il cursore nell'ambito del server.

Osservazioni:

sp_cursor_list produce un elenco dei cursori del server correnti aperti dalla connessione e descrive gli attributi globali per ogni cursore, ad esempio la scorrevolità e l'updatabilità del cursore. I cursori elencati includono sp_cursor_list :

  • Cursori transact-SQL server.

  • Cursori del server API aperti da un'applicazione ODBC che viene quindi chiamata SQLSetCursorName per denominare il cursore.

Utilizzare sp_describe_cursor_columns per una descrizione degli attributi del set di risultati restituito dal cursore. Utilizzare sp_describe_cursor_tables per un report delle tabelle di base a cui fa riferimento il cursore. sp_describe_cursor restituisce le stesse informazioni di sp_cursor_list, ma solo per un cursore specificato.

Autorizzazioni

Le autorizzazioni di esecuzione vengono assegnate per impostazione predefinita al ruolo public .

Esempi

Nell'esempio seguente viene aperto un cursore globale e viene utilizzata la stored procedure sp_cursor_list per creare un report degli attributi del cursore.

USE AdventureWorks2022;
GO

-- Declare and open a keyset-driven cursor.
DECLARE abc CURSOR KEYSET
FOR
SELECT LastName
FROM Person.Person
WHERE LastName LIKE 'S%';

OPEN abc;

-- Declare a cursor variable to hold the cursor output variable
-- from sp_cursor_list.
DECLARE @Report CURSOR;

-- Execute sp_cursor_list into the cursor variable.
EXEC master.dbo.sp_cursor_list
    @cursor_return = @Report OUTPUT,
    @cursor_scope = 2;

-- Fetch all the rows from the sp_cursor_list output cursor.
FETCH NEXT from @Report;
WHILE (@@FETCH_STATUS <> -1)
BEGIN
    FETCH NEXT from @Report;
END

-- Close and deallocate the cursor from sp_cursor_list.
CLOSE @Report;
DEALLOCATE @Report;
GO

-- Close and deallocate the original cursor.
CLOSE abc;
DEALLOCATE abc;
GO