sp_cursor_list (Transact-SQL)
Restituisce gli attributi dei cursori del server aperti per la connessione corrente.
Si applica a: SQL Server (da SQL Server 2008 a versione corrente). |
Convenzioni della sintassi Transact-SQL
Sintassi
sp_cursor_list [ @cursor_return = ] cursor_variable_name OUTPUT
, [ @cursor_scope = ] cursor_scope
[;]
Argomenti
[ @cursor\_return= ] cursor_variable_nameOUTPUT
Nome di una variabile di cursore dichiarata. cursor_variable_name è di tipo cursor e non prevede alcun valore predefinito. Il cursore restituito è di tipo scorrevole, dinamico e di sola lettura.[ @cursor\_scope= ] cursor_scope
Specifica il livello dei cursori da segnalare. cursor_scope è int e non prevede alcun valore predefinito. I valori possibili sono i seguenti.Valore
Descrizione
1
Restituisce tutti i cursori locali.
2
Restituisce tutti i cursori globali.
3
Restituisce i cursori locali e quelli globali.
Valori restituiti
Nessuno
Cursori restituiti
sp_cursor_list restituisce un report come parametro di output di un cursore Transact-SQL, anziché come set di risultati. In questo modo i batch, le stored procedure e i trigger Transact-SQL possono elaborare l'output una riga alla volta. Non è possibile richiamare direttamente la procedura da funzioni API del database. Il parametro di output del cursore deve essere associato a una variabile di programma, ma le API del database non supportano l'associazione di parametri o variabili del cursore.
Di seguito è riportato il formato del cursore restituito da sp_cursor_list. Il formato del cursore corrisponde a quello 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 impostato tramite il nome specificato in un'istruzione DECLARE CURSOR, il nome di 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 che deriva 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 |
Valori restituiti dalla funzione di sistema CURSOR_STATUS: 1 = Il cursore a cui si fa riferimento tramite il nome o la variabile è aperto. Se il cursore è di tipo insensitive, statico o keyset, il set di risultati contiene almeno una riga. Se invece è dinamico, contiene zero o più righe. 0 = Il cursore a cui si fa riferimento tramite il nome o la variabile è aperto, ma non contiene righe. I cursori dinamici non restituiscono mai questo valore. -1 = Il cursore a cui si fa riferimento tramite il nome o la variabile è chiuso. -2 = Si applica solo alle variabili di cursore. Alla variabile non è assegnato alcun cursore. È possibile che un parametro OUTPUT abbia assegnato un cursore alla variabile, ma la stored procedure ha chiuso il cursore prima di completare l'operazione. -3 = Non esiste alcun cursore o variabile di cursore con il nome specificato oppure alla variabile non è stato assegnato alcun cursore. |
model |
smallint |
1 = Insensitive (o statico) 2 = Keyset 3 = Dynamic 4 = Fast forward-only |
concurrency |
smallint |
1 = Di sola lettura. 2 = Blocchi di scorrimento. 3 = Ottimistica. |
scrollable |
smallint |
0 = Forward-only 1 = Scorrevole |
open_status |
smallint |
0 = Chiuso 1 = Aperto |
cursor_rows |
int |
Numero di righe del set di risultati. Per ulteriori informazioni, vedere @@CURSOR_ROWS. |
fetch_status |
smallint |
Stato dell'ultimo recupero del cursore. Per ulteriori informazioni, vedere @@FETCH_STATUS. 0 = Recupero corretto. -1 = Recupero non riuscito o non compreso entro i limiti del cursore. -2 = La riga richiesta è mancante. -9 = Nessun recupero eseguito 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 ulteriori informazioni, vedere @@ROWCOUNT. |
last_operation |
smallint |
Ultima operazione eseguita sul cursore: 0 = Non è stata eseguita alcuna operazione. 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 genera un elenco dei cursori del server attualmente aperti dalla connessione e una descrizione degli attributi globali di ogni cursore, ad esempio se il cursore è scorrevole e aggiornabile. Fra i cursori elencati tramite sp_cursor_list sono inclusi:
I cursori del server Transact-SQL.
I cursori API del server aperti in un'applicazione ODBC in cui è stato richiamato successivamente SQLSetCursorName per assegnare un nome al cursore.
Utilizzare sp_describe_cursor_columns per ottenere una descrizione degli attributi del set dei risultati restituito dal cursore. Utilizzare sp_describe_cursor_tables per ottenere un report delle tabelle di base a cui fa riferimento il cursore. sp_describe_cursor fornisce 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 AdventureWorks2012;
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