Leggendo qua e là vedo che sono rimasto forse l' unico sviluppatore a difendere ancora oggi l' utilizzo dei cursori in SQL Server.
Sinceramente alcune volte l' utlizzo di cursori è una manna dal cielo, anche se la CPU del server per pochi millisecondi schizza alle stelle.
Vediamo come si utlizza un cursore in modalità SCROLL, ovvero come il buon vecchio recordset di VB6.
Dichiarazione del cursose
GO
BEGIN PRINT '*** Dichiarazione variabili ***'
DECLARE @ID int, @Nome varchar(50), @Descrizione varchar(255)
PRINT '*** Dichiarazione Cursore ***'
DECLARE My_Cursor CURSOR SCROLL
FOR
SELECT ID, Nome, Descrizione FROM dbo.Prodotti
In questa prima parte dichiaro un cursore, e 3 variabili che verranno popolate ad ogni Loop dai valori correnti della Row che stiamo leggendo.
Apertura del Cursore
OPEN My_Cursor
PRINT '*** Lettura ***'
FETCH FIRST FROM My_Cursor
INTO @ID, @Nome, @Descrizione
A questo punto non ci resta che creare un semplice Loop in grado di leggere i valori di ogni Row esposta dalla nostra Query
Lettura dei risultati tramite Loop
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @ID
PRINT @Nome
PRINT '*** Prossimo Record ***'
FETCH NEXT FROM My_Cursor
INTO @ID, @Nome, @Descrizione
END
Infine per far un lavoro pulito e per non intasare il nostro DBMS alla fine del Loop chiudiamo il cursore e lo deallochiamo.
Chiusura e deallocazione
CLOSE My_Cursor
DEALLOCATE My_Cursor