Condividi tramite


sp_describe_cursor (Transact-SQL)

Crea un report degli attributi di un cursore del server.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

sp_describe_cursor [ @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' ] 
     } 

Argomenti

  • [ @cursor_return = ] output_cursor_variable OUTPUT
    Nome di una variabile di cursore dichiarata per la ricezione dell'output del cursore. output_cursor_variable è di tipo cursor e non prevede alcun valore predefinito. È inoltre necessario che non sia associata ad alcun cursore quando si chiama la stored procedure sp_describe_cursor. Il cursore restituito è di tipo scorrevole, dinamico e di sola lettura.
  • [ @cursor_source = ] { N'local' | N'global' | N'variable' }
    Specifica se il cursore oggetto del report viene specificato utilizzando il nome di un cursore locale, di un cursore globale o di una variabile di cursore. Il parametro è di tipo nvarchar(30).
  • [ @cursor_identity = ] N'local_cursor_name' ]
    Nome di un cursore creato da un'istruzione DECLARE CURSOR con la parola chiave LOCAL o che è stato creato come LOCAL per impostazione predefinita. local_cursor_name è di tipo nvarchar(128).
  • [ @cursor_identity = ] N'global_cursor_name' ]
    Nome di un cursore creato da un'istruzione DECLARE CURSOR con la parola chiave GLOBAL o che è stato creato come GLOBAL per impostazione predefinita. global_cursor_name è di tipo nvarchar(128).

    global_cursor_name può corrispondere inoltre al nome di un cursore del server API aperto da un'applicazione ODBC e in seguito denominato tramite la chiamata di SQLSetCursorName.

  • [ @cursor_identity = ] N'input_cursor_variable' ]
    Nome di una variabile di cursore associata a un cursore aperto. input_cursor_variable è di tipo nvarchar(128).

Osservazioni

La stored procedure sp_describe_cursor descrive gli attributi globali per un cursore del server, ad esempio la possibilità di scorrimento o aggiornamento. 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. Utilizzare sp_cursor_list per ottenere un report dei cursori del server Transact-SQL visibili nella connessione.

Un'istruzione DECLARE CURSOR potrebbe richiedere un tipo di cursore non supportato da SQL Server tramite l'istruzione SELECT inclusa nell'istruzione DECLARE CURSOR. In questo caso, SQL Server converte in modo implicito il cursore in un tipo supportato per l'istruzione SELECT. Se nell'istruzione DECLARE CURSOR si specifica TYPE_WARNING, SQL Server invia all'applicazione un messaggio informativo relativo alla conversione eseguita. È quindi possibile chiamare la stored procedure sp_describe_cursor per determinare il tipo di cursore implementato.

Autorizzazioni

È richiesta l'appartenenza al ruolo public.

Valori restituiti

Nessuno

Cursori restituiti

sp_describe_cursor incapsula il set dei risultati in un parametro di output cursor Transact-SQL. In questo modo i batch, le stored procedure e i trigger Transact-SQL possono elaborare l'output una riga alla volta. Questo significa inoltre che non è possibile chiamare direttamente la procedura da funzioni API di database. Il parametro di output cursor deve essere associato a una variabile di programma, ma le API del database non supportano l'associazione di parametri o variabili cursor.

Nella tabella seguente viene descritto il formato del cursore restituito da sp_describe_cursor. Tale formato corrisponde a quello restituito da sp_cursor_list.

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 nome di riferimento corrisponde al nome della variabile.

cursor_name

sysname

Nome del cursore che deriva da un'istruzione DECLARE CURSOR. In SQL Server 2005, se il cursore viene creato tramite l'impostazione di una variabile di cursore su un cursore, cursor_name restituisce il nome della variabile di cursore. Nelle versioni precedenti di SQL Server questa colonna di output restituisce un nome generato dal sistema.

cursor_scope

tinyint

1 = LOCAL

2 = GLOBAL

status

int

Stessi 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 dei 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 che la stored procedure abbia 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

tinyint

1 = Insensitive (o statico)

2 = Keyset

3 = Dinamico

4 = Fast forward-only

concurrency

tinyint

1 = Di sola lettura

2 = Blocchi di scorrimento

3 = Ottimistica

scrollable

tinyint

0 = Forward-only

1 = Scorrevole

open_status

tinyint

0 = Chiuso

1 = Aperto

cursor_rows

decimal(10,0)

Numero di righe risultanti nel set dei risultati. Per ulteriori informazioni, vedere @@CURSOR_ROWS (Transact-SQL).

fetch_status

smallint

Stato dell'ultimo recupero sul cursore. Per ulteriori informazioni, vedere @@FETCH_STATUS (Transact-SQL).

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 dei risultati del cursore.

row_count

decimal(10,0)

Numero di righe modificate dall'ultima operazione eseguita sul cursore. Per ulteriori informazioni, vedere @@ROWCOUNT (Transact-SQL).

last_operation

tinyint

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.

Esempi

Nell'esempio seguente viene aperto un cursore globale ed eseguita la stored procedure sp_describe_cursor per creare un report degli attributi del cursore.

USE AdventureWorks;
GO
-- Declare and open a global cursor.
DECLARE abc CURSOR STATIC FOR
SELECT LastName
FROM Person.Contact

OPEN abc

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

-- Execute sp_describe_cursor into the cursor variable.
EXEC master.dbo.sp_describe_cursor @cursor_return = @Report OUTPUT,
        @cursor_source = N'global', @cursor_identity = N'abc'

-- Fetch all the rows from the sp_describe_cursor 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.
CLOSE @Report
DEALLOCATE @Report
GO

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

Vedere anche

Riferimento

CURSOR_STATUS (Transact-SQL)
DECLARE CURSOR (Transact-SQL)
sp_cursor_list (Transact-SQL)
sp_describe_cursor_columns (Transact-SQL)
sp_describe_cursor_tables (Transact-SQL)

Altre risorse

Cursori (Motore di database)

Guida in linea e informazioni

Assistenza su SQL Server 2005