Il wiki della programmazione -

Home :: Pagine che puntano a questa :: Login/Register

Microsoft SQL Server - i cursori
Il cursore permette di fare un ciclo basato su una SELECT.
Concettualmente è molto semplice: faccio una SELECT e per ogni record faccio altre cose, utilizzando i dati del recordset.
Dal punto di vista sintattico è più articolato, vediamo:

Per prima cosa devo dichiarare e aprire un cursore, associandolo a una query:
DECLARE C CURSOR FOR SELECT sa, descrizione_del_titolo FROM T_ANTIT
OPEN C


Poi devo cominciare a infilare i campi del cursore (che sono gli stessi della SELECT) in variabili che ho precedentemente dichiarato.
Concettualmente è come il movenext dell'oggetto recordset.
FETCH NEXT FROM C
INTO @sa, @DDT -– devo aver già dichiarato @sa float e @DDT varchar(50)


La variabile di sistema @@FETCH_STATUS indica l'esito dell'ultimo "fetch" (cioè dell'ultima lettura di riga)
Purtroppo la variabile è GLOBALE, quindi l'uso di cursori annidati può essere un po' macchinoso.
WHILE @@FETCH_STATUS = 0
BEGIN
-– qui ci metto tutte le istruzioni relative alla riga corrente, poi...


All'interno del ciclo devo inserire un fetch (passo alla riga successiva).
Questa istruzione è uguale a quella inserita poche righe fa
    FETCH NEXT FROM C
    INTO @sa, @DDT
END

Questo è importante: il cursore ha la stessa validità delle tabelle temporanee, cioè se create un cursore e poi fate girare di nuovo la query non funzionerà perché dirà che il cursore è già stato dichiarato.
DEALLOCATE C


Ecco quindi tutti i "mattoni" per creare un cursore
DECLARE C CURSOR FOR [query]
OPEN C

FETCH NEXT FROM C
INTO @vars

WHILE @@FETCH_STATUS = 0
BEGIN
    FETCH NEXT FROM C
    INTO @vars
END

DEALLOCATE C


Riferimenti
La pagina principale di MSSQL Server
Categories
MSSQL Server
Database

Non ci sono commenti. [Aggiungere un commento]

Valid XHTML 1.0 Strict :: Valid CSS :: Realizzato con Wikka Wakka Wiki 1.1.6.3
Page was generated in 0.0947 seconds