Come usare cursori nidificati

April 12

Come usare cursori nidificati


I cursori sono una struttura fornita nelle versioni programmabili di Structured Query Language (SQL), come Sybase o Transact-SQL di Microsoft SQL Server. Definire un cursore per un'istruzione SELECT o un aggiornamento di SQL su una o più tabelle. Il cursore ha un nome che può essere utilizzato per riferirsi a, aprire e chiudere il cursore o recuperare le righe dal set del cursore. I cursori vengono utilizzati quando ogni riga del set ha bisogno di trattamento o dei suoi valori sono utilizzati in variabili del programma. Quando un nuovo cursore viene dichiarato nel ciclo che elabora ogni riga di un cursore, il nuovo cursore interno è nidificato all'interno del vecchio cursore esterno.

istruzione

1 Dichiarare un cursore per una semplice istruzione SELECT utilizzando la seguente sintassi T-SQL:

DICHIARARE <nome-cursore cursore>

PER campo1 SELECT, campo2, field3

FROM &lt;table-name>

DOVE Campo4 & lt; = @limitval

2 Aprire il cursore per l'elaborazione utilizzando questa sintassi T-SQL:

Apri <nome-cursore>

3 Recuperare le righe dal cursore aperto per l'elaborazione, in quanto è un cursore di lettura (selezione). Dichiarare le variabili necessarie per memorizzare i valori dei campi nella riga corrente del cursore. La sintassi T-SQL per il recupero file cursore è il seguente:

FETCH AVANTI DA <nome-cursore> IN @ var_fld1, @ var_fld2, @ var_fld3

mentre @@ FETCH_STATUS == 0

inizio

--- <Riga corrente del cursore processo qui>

FETCH AVANTI DA <nome-cursore> IN @ var_fld1, @ var_fld2, @ var_fld3

fine

4 Aggiungere la dichiarazione e l'esecuzione del secondo o interna del cursore nel ciclo recupero del cursore precedente o esterno come segue:

- Cursore esterno recuperare ciclo

mentre @@ FETCH_STATUS == 0

inizio

&lt; process current row of outer cursor here >

- Tempo di dichiarare il cursore interno - nidificazione inizia

DICHIARARE inner_cursor CURSORE

FOR SELECT X, Y, Z, ....

FROM tabella1, tabella2, ...

WHERE <condizione>

inner_cursor APERTO

FETCH AVANTI DA inner_cursor IN @varX, @varY, @varZ ...

mentre @@ FETCH_STATUS == 0

iniziare - cursore interno recuperare ciclo

-- &lt;process current inner_cursor row here>

- Ottenere riga successiva

FETCH AVANTI DA inner_cursor IN @varX, @varY, @varZ ...

end - cursore interno recuperare ciclo

end - cursore esterno recuperare ciclo

Consigli e avvertenze

  • Si consiglia di implementare cursori nidificati solo quando assolutamente necessario. Sono SQL dinamico e costosi e tassare per SQL Server per elaborare. Evitare l'uso di troppi tabelle temporanee o le istruzioni INSERT durante l'utilizzo di cursori nidificati. Utilizzare le funzioni e le procedure di negozi per passare parametri e condividere i dati, quando possibile, per eliminare la necessità per i cursori.