Qu'est-ce qui ne va pas avec cette boucle imbriquée en SQL

j'ai eu une situation étrange aujourd'hui en faisant un code sql unique. Cette boucle imbriquée ne semble pas fonctionner la boucle externe: elle imprime (0,0),(0,1),(0,2) et (0,3)

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

est-ce que je manque quelque chose de flagrant?

18
demandé sur edosoft 2010-01-07 16:32:52

3 réponses

Vous ne réinitialisez pas votre J var pour la prochaine itération

 set @i = @i + 1
 set @j = 0
35
répondu almog.ori 2010-01-07 13:34:33

Vous n'êtes pas la réinitialisation @j.

4
répondu ozczecho 2010-01-07 13:36:18
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, la réponse ci-dessus, il suffit d'ajouter le code pour plus de détails, lol~

0
répondu Chjquest 2012-04-20 13:15:46