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