2010-09-20 15 views
5

Me pregunto por qué las variables de tabla dentro del ciclo while no se comportan como otras variables. Las variables de tabla se crean solo una vez y se usarán en todo el ciclo. pero otras variables se inicializan cada vez que aumenta el ciclo.Variables de tabla dentro del ciclo While no se inicializan cada vez: SQL Server

Comprobar el código de abajo para más información

declare @tt int 
set @tt =10 
while @tt>0 
begin 

     declare @temptable table(id int identity(1,1),sid bigint) 
     insert into @temptable 
       select @tt union all 
       select @tt + 1 

       select * from @temptable 
       --delete from @temptable 
       set @[email protected] 
end 

es esto un error ??

Respuesta

5

Su premisa es incorrecta. Otras variables no se reinician cada vez que se encuentra la declaración declare.

set nocount on 

declare @tt int 
set @tt =10 
while @tt>0 
begin 

     declare @i int 

     set @i = isnull(@i,0) + 1 
     print @i 
     set @[email protected] 

end 

Prints

1 
2 
... 
9 
10 
+1

gracias por la actualización .. me perdí isnull al probar con la variable ... que condujo a mi cofusión .. :( – RameshVel

4

Como era de esperar

SQL Server alcance variable es por lote o toda la función/procedimiento/gatillo, no por constructo negro/anidada

http://msdn.microsoft.com/en-us/library/ms187953.aspx:

El alcance de una variable es el rango de instrucciones de Transact-SQL que pueden hacer referencia a la variable . El alcance de una variable dura desde el punto en que se declara hasta el final del lote o procedimiento almacenado en el que está declarado.

0

Aunque es antiguo puesto simplemente Wann añadir mis comentarios

 
set nocount on 
declare @tt int 
set @tt =10 
while @tt>0 
begin 
     declare @i int=0 
     set @i = @i + 1 
     print @i 
     set @[email protected] 
end 

Results: 
1 
1 
1 
1 
1 
1 
1 
1 
1 
1 
-1

Si desea cargar la variable de tabla cada vez que se ejecuta el bucle. DROP FROM @Tablevariable una vez que el trabajo se realiza dentro del ciclo.

+0

No puede soltar una variable de tabla manualmente. –

Cuestiones relacionadas