Ripetizione ciclo fino alla fine dei valori presenti nella tabella

venerdì 06 luglio 2007 - 14.23

MagicBotolo Profilo | Newbie

Ciao, questa volta vi scrivo per chiedere come si può scorrere i valori di una tabella uno alla volta. Mi spiego meglio: prima avevo una tabella del tipo 1;2;3;4 (unica colonna con numeri diversi, sicuramente crescenti) e ripetevo alcune azioni inserendole in un ciclo del tipo

SELECT @key=MIN(keyvalue) from #keys
WHILE @key IS NOT NULL
BEGIN
...
SELECT @key=MIN(keyvalue) from #keys
WHERE keyvalue>@key
END

In pratica estraevo i dati da una tabella, con questi dati estratti riempivo i campi della tabella #keys e poi scorrevo i campi inserendo questi valori nella variabile @key.

Adesso la tabella #keys è del tipo A,1;A,2;A,3;B,1;B,2;C,3 (due colonne). Questo significa che non posso più usare il criterio del considerare il nuovo valore della variabile @key maggiore del valore precedente (perchè nella variabile @key continuo a memorizzare i numeri).
Pensavo di usare i cursori con una query del tipo:
DECLARE Cursore CURSOR FOR
SELECT DATI.ID_SENS, DATI.ID_MIS
FROM DATI, Tabella
WHERE DATI.ID_SENS = Tabella.ID_SENS
AND DATI.ID_MIS = Tabella.ID_MIS

group by DATI.ID_SENS, DATI.ID_MIS
order by DATI.ID_SENS, DATI.ID_MIS

OPEN Cursore

FETCH NEXT FROM Cursore
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM Cursore
END

CLOSE Cursore
DEALLOCATE Cursore

Facendo così mi sposto nelle tabelle analizzando tutte le posizioni. Di per sè funziona...
Ma vi chiedo se c'è un modo più interessante (magari più performante) o se quello che ho scelto è scritto nel modo migliore.

Uso Microsoft SQL Server 2000.
Grazie 1000...
Ciao!!

lbenaglia Profilo | Guru

>Ma vi chiedo se c'è un modo più interessante (magari più performante)
>o se quello che ho scelto è scritto nel modo migliore.
>
>Uso Microsoft SQL Server 2000.
Con SQL Server i cursori andrebbero evitati come la peste dato che nel 99% dei casi si possono sostituire con operazioni set-based.
Per quale motivo devi scorrere le righe della tabella row-by-row?

>Grazie 1000...
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

MagicBotolo Profilo | Newbie

Devo scorrere i valori uno alla volta perchè per ognuno devo fare delle operazioni di estrazione e sistemazione dati... E il dato estratto devo usarlo all'interno delle operazioni. Ecco perchè l'uso di una variabile mi diventa indispensabile. Per non complicare troppo la procedura che sto già usando mi chiedevo se esiste un modo per scorrere le righe una alla volta; altrimenti dovrei fare confronti tra il numero e la lettera letti e in base al risultato prendere una decisione (potrei per esempio fare un doppio ciclo, prima sulle lettere e poi sui numeri)...
Ciao!!

lbenaglia Profilo | Guru

>Per non complicare troppo la procedura che sto già usando mi chiedevo
>se esiste un modo per scorrere le righe una alla volta;
Usa i cursori...

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5