Eseguire l'iterazione di un set di risultati usando Transact-SQL in SQL Server
Questo articolo descrive vari metodi che è possibile usare per scorrere un set di risultati usando Transact-SQL in SQL Server.
Versione originale del prodotto: SQL Server
Numero KB originale: 111401
Riepilogo
Questo articolo descrive vari metodi che è possibile usare per simulare una logica simile FETCH
-NEXT
a un cursore in una stored procedure, un trigger o un batch Transact-SQL.
Usare 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 temporanee. Con questo metodo si crea uno snapshot dell'istruzione iniziale SELECT
e lo si usa come base per il cursore. Ad esempio:
/********** example 1 **********/
DECLARE @au_id char( 11 )
SET rowcount 0
SELECT * INTO #mytemp FROM authors
SET rowcount 1
SELECT @au_id = au_id FROM #mytemp
WHILE @@rowcount <> 0
BEGIN
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
END
SET rowcount 0
Un secondo metodo consiste nell'usare la min
funzione per esaminare una tabella una riga alla volta. Questo metodo intercetta le nuove righe aggiunte dopo l'avvio dell'esecuzione della stored procedure, a condizione che la nuova riga abbia 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 authors
WHILE @au_id IS NOT NULL
BEGIN
SELECT * FROM authors WHERE au_id = @au_id
SELECT @au_id = min( au_id ) FROM authors WHERE au_id > @au_id
END
Nota
Entrambi gli esempi 1 e 2 presuppongono che esista un identificatore univoco per ogni riga della tabella di origine. In alcuni casi, non può esistere alcun identificatore univoco. In questo caso, è possibile modificare il metodo della tabella temporanea per usare una colonna chiave appena creata. Ad esempio:
/********** example 3 **********/
SET rowcount 0
SELECT NULL mykey, * INTO #mytemp FROM authors
SET rowcount 1
UPDATE #mytemp SET mykey = 1
WHILE @@rowcount > 0
BEGIN
SET rowcount 0
SELECT * FROM #mytemp WHERE mykey = 1
DELETE #mytemp WHERE mykey = 1
SET rowcount 1
UPDATE #mytemp SET mykey = 1
END
SET rowcount 0
Riferimenti
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per