sp_cursor_list (Transact-SQL)

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

Icona di collegamento a un argomentoConvenzioni 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 restituire. cursor_scope è di tipo int e non prevede alcun valore predefinito. I possibili valori 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 è analogo 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 mediante l'impostazione di 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 = Dinamico

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

La stored procedure sp_cursor_list consente di creare un elenco dei cursori del server aperti nella connessione e di ottenere una descrizione degli attributi globali di ogni cursore, ad esempio se è scorrevole e aggiornabile. I cursori elencati tramite sp_cursor_list sono i seguenti:

  • 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 il cursore fa riferimento. La stored procedure sp_describe_cursor restituisce le stesse informazioni di sp_cursor_list, ma solo per il 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 AdventureWorks2008R2;
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