Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[OT] Ciclo for in una stored procedure MSSQLServer

1,601 views
Skip to first unread message

Marco Bortolani

unread,
Jul 12, 2004, 1:12:00 PM7/12/04
to
Ho questo problema: in un database Microsoft SQLServer vorrei realizzare
una stored procedure all'interno della quale ciclare sui record restituiti
da una query.

In Interbase farei (più o meno)
FOR select campo1, campo2
from TABELLA
where campo3 = 'valore'
into :varcampo1, :varcampo2
DO
BEGIN
/* qui posso usare le variabili
varcampo1 e varcampo2 riempite
ad ogni ciclo con le tuple della
query
*/
END

In SQLServer mi sembra che si debbano utilizzare i cursori, ma ho trovato
solamente esempi di come recuperare un solo campo dalla query master:

DECLARE c CURSOR
FOR select campo1 from TABELLA where campo3 = @@valore
BEGIN
OPEN c
FETCH c INTO @@campo1
WHILE (@@FETCH_STATUS=0)
BEGIN
...
END
FETCH c INTO @@campo1
END

A me servirebbe poter utilizzare due valori della tabella master (campi
cod. articolo e giacenza di una tabella di magazzino): chiedevo quindi se
qualcuno ha qualche dritta da darmi su come procedere (vanno bene anche dei
link, ma ho passato tutto il pomeriggio a setacciare la rete senza cavare
un ragno dal buco).

Grazie in anticipo.

Marco
info @ marcobortolani.it

Massimo Pini

unread,
Jul 13, 2004, 3:17:14 AM7/13/04
to
On Mon, 12 Jul 2004 17:12:00 GMT, Marco Bortolani <marco...@tin.it>
wrote:

[CUT]

>DECLARE c CURSOR
>FOR select campo1 from TABELLA where campo3 = @@valore
>BEGIN
> OPEN c
> FETCH c INTO @@campo1
> WHILE (@@FETCH_STATUS=0)
> BEGIN
> ...
> END
> FETCH c INTO @@campo1
>END
>
>A me servirebbe poter utilizzare due valori della tabella master (campi
>cod. articolo e giacenza di una tabella di magazzino): chiedevo quindi se
>qualcuno ha qualche dritta da darmi su come procedere (vanno bene anche dei
>link, ma ho passato tutto il pomeriggio a setacciare la rete senza cavare
>un ragno dal buco).

basta modificare la select :
declare MyCursor cursor for select campo1, campo2, campo3 from tabella
e poi
Fetch next from myCursor into @campo1, @campo2, @campo3

però il tuo loop mi sembra sbagliato

declare MyCur cursor for
select Campo from Tabella

Open MyCur

FETCH NEXT FROM MyCur INTO @a

While @@FETCH_STATUS = 0 begin

-- codice vario

FETCH NEXT FROM @MyCur INTO @a

end

Close MyCur
Deallocate MyCur


>
>Grazie in anticipo.
>
> Marco
> info @ marcobortolani.it

Ciao.
Masismo.

--
"La velocità luce non è sufficiente Comandante Nunziatella,
dobbiamo passare alla velocità smodata!"

Massimo Pini

unread,
Jul 13, 2004, 3:19:15 AM7/13/04
to

>> FETCH c INTO @@campo1

Attenzione che le variabili sono @valore e non @@valore che invece
sono variabili di sistema.

Marco Bortolani

unread,
Jul 13, 2004, 4:09:10 AM7/13/04
to
In data Tue, 13 Jul 2004 09:17:14 +0200, Massimo Pini ha scritto:

> basta modificare la select :
> declare MyCursor cursor for select campo1, campo2, campo3 from tabella
> e poi
> Fetch next from myCursor into @campo1, @campo2, @campo3

Adesso provo...

> perņ il tuo loop mi sembra sbagliato
L'avevo scritto un po' alla bell'e meglio per far intendere il senso del
discorso, comunque grazie della dritta.

Marco
info @ marcobortolani.it

Marco Bortolani

unread,
Jul 13, 2004, 4:47:53 AM7/13/04
to
Che dire: va che è una meraviglia :-))

Dopo il grazie in anticipo, ti rifilo un supergrazie in posticipo!

Saluti
Marco

0 new messages