Ciclo WHILE

lunedì 25 febbraio 2008 - 14.42

angie81 Profilo | Junior Member

devo inserire un ciclo WHILE per N giorni...
ho qualche dubbio..
è più giusto così:

i = 0 WHILE i < GIORNI [quello che devo fare] SET i = i + 1 END

oppure

i = 1 WHILE i <= GIORNI SET i = i + 1 [quello che devo fare] END

o si equivalgono?

lbenaglia Profilo | Guru

>o si equivalgono?

Sicuramente non sono equivalenti:

DECLARE @Giorni int, @i int SET @Giorni = 5 SET @i = 0 WHILE @i < @Giorni BEGIN PRINT 'Ciclo ' + CAST(@i as char(1)) + ' di ' + CAST(@Giorni as char(1)) SET @i = @i + 1 END /* Output: Ciclo 0 di 5 Ciclo 1 di 5 Ciclo 2 di 5 Ciclo 3 di 5 Ciclo 4 di 5 */ SET @i = 1 WHILE @i <= @Giorni BEGIN SET @i = @i + 1 PRINT 'Ciclo ' + CAST(@i as char(1)) + ' di ' + CAST(@Giorni as char(1)) END /* Output: Ciclo 2 di 5 Ciclo 3 di 5 Ciclo 4 di 5 Ciclo 5 di 5 Ciclo 6 di 5 */

Io ti suggerirei il primo ciclo solo per il fatto che segue le buone regole della programmazione strutturata.
Ad ogni modo, per quale motivo ti serve un ciclo WHILE?
Sei proprio sicura che non esiste una soluzione set-based al tuo problema?

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

alx_81 Profilo | Guru

>devo inserire un ciclo WHILE per N giorni... ho qualche dubbio..
>si equivalgono?
il numero di operazioni eseguite è lo stesso ma non si equivalgono.
che DBMS utilizzi?
Se SQL Server la sintassi è la seguente:

DECLARE @i int DECLARE @Giorni int SET @i = 1 SET @Giorni = 10 WHILE @i <= @Giorni BEGIN -- quello che devi fare SET @i = @i + 1 END

WHILE (transact-SQL)
http://msdn2.microsoft.com/en-us/library/ms178642.aspx


Alx81 =)

http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

angie81 Profilo | Junior Member

grazie.. a me interessa il numero di cicli.. più che il valore restituito..

cmq non credo di poter sostituire il WHILE.. dato che al suo interno c'è tutto questo..

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

lbenaglia Profilo | Guru

>cmq non credo di poter sostituire il WHILE.. dato che al suo
>interno c'è tutto questo..
Reingegnerizzando il tutto sono convinto che te la cavi con qualche query... ma non chiedermi di farlo

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

angie81 Profilo | Junior Member

con delle query??

che poi è sempre la stessa procedura che lanciata con un semplice EXEC funziona.. mentre se la lancio da trigger.. non va..

lbenaglia Profilo | Guru

>con delle query??
Reingegnerizzando...

>che poi è sempre la stessa procedura che lanciata con un semplice
>EXEC funziona.. mentre se la lancio da trigger.. non va..
E tu vorresti eseguire tutto quel "casotto" via trigger? Meno male che non funziona, altrimenti ammazzeresti la scalabilità del DBMS
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

angie81 Profilo | Junior Member

ehm.. non mi è chiaro il "Reingegnerizzando...".. cmq mi accontento di quel che ho fatto .. dato che è da poco meno di un mese che uso T-SQL in SQL Server 2000...


da trigger io dovrei semplicemente lanciare la stored procedure che contiene tutto il codice (solo su inserimento di un nuovo record...) quindi nel trigger c'è solo l'EXEC .. che non va.. mentre lanciando una nuova query con solo il comando EXEC funziona tutto..
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5