2010-01-07 6 views
18

Je me suis heurté à une situation étrange aujourd'hui en faisant un code SQL unique. Cette boucle imbriquée ne semble pas fonctionner la boucle extérieure: elle imprime (0,0), (0,1), (0,2) et (0,3)Quel est le problème avec cette boucle WHILE imbriquée dans SQL

declare @i int, @j int 
select @i = 0, @j = 0 
while @i < 3 begin 
    while @j < 3 begin 
     select @i as i, @j as j 
     set @j = @j + 1 
    end 
    set @i = @i + 1 
end 

Suis-je manque quelque chose flagrante évident?

+1

Merci pour ce Q! J'avais besoin d'un grand sourire aujourd'hui. ;-) –

Répondre

33

Vous n'êtes pas réinitialiser votre j var pour la prochaine itération

set @i = @i + 1 
set @j = 0 
+4

Doh! En parlant d'évidence! – edosoft

+1

:) ils sont toujours –

+0

mais j'ai fait la même erreur aussi! Merci. – Sijav

4

Vous n'êtes pas réinitialisez @j.

0
declare @i int, @j int 
select @i = 0, @j = 0 --<- Wrong place set @j 
while @i < 3 
begin 
    select @i, @j --<-test print, then you will know what happened~ 
    --set @j = 0 --<- Right place to set @j 
    while @j < 3 
    begin 
     select @i as i, @j as j 
     set @j = @j + 1 
    end 
    set @i = @i + 1 
end 

Le résultat original est 0/0 0/0 0/1 0/2 1/3 2/3

Eh bien, ce qui précède a répondu, ajoutez simplement le code pour plus détail, lol ~