Nwlapcug.com


Come utilizzare i cursori nidificati

Come utilizzare i cursori nidificati


I cursori sono una struttura fornita nelle versioni programmabile di SQL Structured Query Language () ad esempio Sybase o Transact-SQL di Microsoft SQL Server. Definire un cursore per un'istruzione SQL select o update su una o più tabelle. Il cursore è un nome che è possibile utilizzare per fare riferimento a, aprire e chiudere il cursore o fetch righe dal cursore impostato. Quando i suoi valori vengono utilizzati nelle variabili di programma o ha bisogno di ogni riga del set di elaborazione, vengono utilizzati i cursori. Quando un nuovo cursore viene dichiarato nel ciclo che elabora ogni riga di un cursore, il cursore interno nuovo è nidificato all'interno di vecchio cursore esterno.

Istruzioni

1

Dichiarare un cursore per un'istruzione select semplice utilizzando la sintassi T-SQL seguente:

DECLARE CURSOR < nome del cursore >

PER SELECT campo1, campo2, campo3

FROM &lt;table-name>

WHERE field4 &lt;= @limitval2

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

Apri < nome del cursore >

3

Recuperare le righe dal cursore aperto per lavorazione, in quanto è un cursore di lettura (select). Dichiarare le variabili necessarie per memorizzare i valori dei campi della riga corrente del cursore. La sintassi T-SQL per il recupero di righe del cursore è come segue:

FETCH NEXT da < nome del cursore > in @var_fld1, @var_fld2, @var_fld3

mentre @@fetch_status = = 0

iniziare

---< processo cursore riga corrente qui >

FETCH NEXT da < nome del cursore > in @var_fld1, @var_fld2, @var_fld3

fine

4

Aggiungere la dichiarazione e l'esecuzione del cursore interno o secondo il ciclo di recupero del cursore precedente o esterno come segue:

-ciclo di recupero di cursore esterno

mentre @@fetch_status = = 0

iniziare

&lt; process current row of outer cursor here >

-- Time to declare the inner cursor - nesting begins

DICHIARARE inner_cursor cursore

PER SELEZIONARE X, Y, Z,...

DA Tabella1, tabella2,...

DOVE < condizione >

OPEN inner_cursor

FETCH NEXT da inner_cursor in @varX, @varY, @varZ...

mentre @@fetch_status = = 0

iniziare - ciclo di recupero di cursore interno

-- &lt;process current inner_cursor row here>

-- get next row

FETCH NEXT FROM inner_cursor INTO @varX, @varY, @varZ...

fine - ciclo di recupero di cursore interno

fine - ciclo di recupero di cursore esterno

Consigli & Avvertenze

  • Si consiglia di implementare cursori nidificati solo quando assolutamente necessario. Sono SQL dinamico e costoso e faticoso per SQL Server per l'elaborazione. Evitare l'uso di troppe tabelle temporanee o istruzioni insert durante l'utilizzo di cursori nidificati. Utilizzare procedure funzioni e negozi per passare i parametri e condividere dati quando possibile eliminare la necessità per i cursori.