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]