Come scorrere un set di risultati utilizzando Transact-SQL in SQL Server

CONTENUTO DELL'ATTIVITÀ

Riepilogo

Questo articolo descrive i vari metodi che è possibile usare per simulare una logica di FETCH-NEXT di tipo cursore in una stored procedure, un trigger o un batch Transact-SQL.

Usare le istruzioni Transact-SQL per scorrere un set di risultati

Esistono tre metodi che è possibile usare per scorrere un set di risultati usando istruzioni Transact-SQL. Un metodo è l'uso di tabelle Temp . Con questo metodo, crei uno "snapshot" dell'istruzione SELECT iniziale e lo usi come base per "cursori". Ad esempio:

/********** example 1 **********/ declare @au_id char( 11 )set rowcount 0select * into #mytemp from authorsset rowcount 1select @au_id = au_id from #mytempwhile @@rowcount <> 0begin    set rowcount 0    select * from #mytemp where au_id = @au_id    delete #mytemp where au_id = @au_id    set rowcount 1    select @au_id = au_id from #mytemp<BR/>endset rowcount 0

Un secondo metodo consiste nell'usare la funzione min per "camminare" una tabella una riga alla volta. Questo metodo intercetta le nuove righe aggiunte dopo l'avvio dell'esecuzione della stored procedure, purché la nuova riga disponga di un identificatore univoco maggiore della riga corrente elaborata nella query. Ad esempio:

/********** example 2 **********/ declare @au_id char( 11 )select @au_id = min( au_id ) from authorswhile @au_id is not nullbegin    select * from authors where au_id = @au_id    select @au_id = min( au_id ) from authors where au_id > @au_idend

Nota: entrambi gli esempi 1 e 2 presuppongono che esista un identificatore univoco per ogni riga della tabella di origine. In alcuni casi non è possibile che esista un identificatore univoco. In questo caso, è possibile modificare il metodo tabella Temp per usare una colonna chiave appena creata. Ad esempio:

/********** example 3 **********/ set rowcount 0select NULL mykey, * into #mytemp from authorsset rowcount 1update #mytemp set mykey = 1while @@rowcount > 0begin    set rowcount 0    select * from #mytemp where mykey = 1    delete #mytemp where mykey = 1    set rowcount 1    update #mytemp set mykey = 1endset rowcount 0

Serve aiuto?

Amplia le tue competenze
Esplora i corsi di formazione
Ottieni in anticipo le nuove caratteristiche
Partecipa a Microsoft Insider

Queste informazioni sono risultate utili?

Grazie per il feedback!

Grazie per il tuo feedback! Potrebbe essere utile metterti in contatto con uno dei nostri operatori del supporto di Office.

×