2010-01-07 61 views
18

Me encontré con una situación extraña hoy haciendo algún código sql de un solo uso. Este bucle anidado no parece para ejecutar el bucle externo: se imprime (0,0), (0,1), (0,2) y (0,3)¿Qué hay de malo con este bucle WHILE anidado en 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 

Me estoy perdiendo algo descaradamente ¿obvio?

+1

Gracias por este Q! Necesitaba una gran sonrisa hoy. ;-) –

Respuesta

33

no está reposicionando el j var para la siguiente iteración

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

¡Doh! Hablando de obvio! – edosoft

+1

:) siempre son –

+0

¡pero también cometí el mismo error! Gracias. – Sijav

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 

El resultado original es 0/0 0/0 0/1 0/2 1/3 2/3

Bueno, respondió lo anterior, sólo tiene que añadir código para obtener más detalle, lol ~

Cuestiones relacionadas