Cursori (Motore di database)

Nei database relazionali le operazioni vengono eseguite su set di righe completi. Il set di righe restituito dall'istruzione SELECT include tutte le righe che soddisfano le condizioni specificate nella clausola WHERE dell'istruzione. Il set di righe completo restituito dall'istruzione è definito set di risultati. Le applicazioni, soprattutto le applicazioni in linea interattive, non sono sempre in grado di gestire in modo efficiente un intero set di risultati come singola unità. In tali applicazioni deve essere pertanto disponibile un meccanismo per l'elaborazione di una riga singola o di un blocco di righe di dimensioni ridotte. I cursori sono un'estensione dei set di risultati che implementano appunto tale meccanismo.

I cursori estendono l'elaborazione dei risultati nel modo seguente:

  • Consentono il posizionamento su righe specifiche del set di risultati.

  • Recuperano una riga o un blocco di righe dalla posizione corrente del set di risultati.

  • Supportano la modifica dei dati delle righe in corrispondenza della posizione corrente del set di risultati.

  • Supportano livelli diversi di visibilità per le modifiche apportate da altri utenti ai dati del database inclusi nel set di risultati.

  • Consentono alle istruzioni Transact-SQL incluse in script, stored procedure e trigger di accedere ai dati di un set di risultati.

Richiesta di cursori

MicrosoftSQL Server supporta due metodi per richiedere un cursore:

  • Transact-SQL

    Il linguaggio Transact-SQL supporta una sintassi per l'utilizzo dei cursori creati in base alla sintassi del cursore ISO.

  • Funzioni per i cursori delle API di database

    SQL Server supporta la funzionalità per i cursori delle API di database seguenti:

    • ADO (Microsoft ActiveX Data Object)

    • OLE DB

    • ODBC (Open Database Connectivity)

Questi due metodi non devono essere implementati entrambi nella stessa applicazione. In un'applicazione in cui le funzionalità del cursore sono state implementate tramite le API, non è consentito richiedere un cursore Transact-SQL tramite l'istruzione Transact-SQL DECLARE CURSOR. L'istruzione DECLARE CURSOR può essere eseguita solo dopo il ripristino di tutti i valori predefiniti degli attributi dei cursori API.

Se non è stato richiesto né un cursore Transact-SQL, né un cursore API, per impostazione predefinita SQL Server restituisce all'applicazione un set di risultati completo, ovvero un set di risultati predefinito.

Processo del cursore

I cursori Transact-SQL e i cursori API prevedono una sintassi diversa, ma per tutti i cursori di SQL Server viene utilizzata la seguente procedura generale:

  1. Associare un cursore al set di risultati di un'istruzione Transact-SQL e definirne le caratteristiche, ad esempio se le righe del cursore sono aggiornabili.

  2. Eseguire l'istruzione Transact-SQL per popolare il cursore.

  3. Recuperare le righe del cursore che si desidera visualizzare. L'operazione che consente di ottenere una riga o un blocco di righe da un cursore è definita operazione di recupero. L'esecuzione di una serie di operazioni di recupero in avanti o a ritroso è definita scorrimento.

  4. Facoltativamente, eseguire operazioni di modifica (aggiornamento o eliminazione) sulla riga che si trova nella posizione corrente del cursore.

  5. Chiudere il cursore.