Si ejecuto lo siguiente en MS SQL 2008 R2 obtengo un resultado inesperado.Alcance de la variable de tabla dentro del cursor SQL
create table #DataTable (someID varchar(5))
insert into #DataTable
values ('ID1'),('ID2'),('ID3'),('ID4'),('ID5')
declare @data varchar(8);
declare myCursor cursor for
select someID from #DataTable
open myCursor
FETCH NEXT FROM myCursor INTO
@data
WHILE(@@Fetch_Status >=0)
BEGIN
declare @tempTable table (someValue varchar(10))
insert into @tempTable select @data + '_ASDF'
select * from @tempTable
FETCH NEXT FROM myCursor INTO
@data
END
close myCursor
deallocate myCursor
drop table #DataTable
El resultado de la última iteración:
someValue
ID1_ASDF
ID2_ASDF
ID3_ASDF
ID4_ASDF
ID5_ASDF
Me haved esperaba sólo para ver
someValue
ID5_ASDF
Parece que la tabla @tempTable variable se mantuvo en su alcance entre las iteraciones de cursor - pero ¿cómo es posible volver a declarar la variable en cada iteración? No tiene ningún sentido para mí.
Lo resuelto por
delete @tempTable
en cada iteración - que también respalda mi suposición sobre ello dejar de ser en su alcance.
¿Alguien puede explicar este comportamiento?
gracias, pero ¿cómo es posible volver a declarar la variable en cada iteración? – zmaster