I have set this little example of a strange behavior
SET NOCOUNT ON;
create table #tmp
(id int identity (1,1),
value int);
insert into #tmp (value) values(10);
insert into #tmp (value) values(20);
insert into #tmp (value) values(30);
select * from #tmp;
declare @tmp_id int, @tmp_value int;
declare tmpCursor cursor for
select t.id, t.value from #tmp t
--order by t.id;
open tmpCursor;
fetch next from tmpCursor into @tmp_id, @tmp_value;
while @@FETCH_STATUS = 0
begin
print 'ID: '+cast(@tmp_id as nvarchar(max));
if (@tmp_id = 1 or @tmp_id = 2)
insert into #tmp (value)
values(@tmp_value * 10);
fetch next from tmpCursor into @tmp_id, @tmp_value;
end
close tmpCursor;
deallocate tmpCursor;
select * from #tmp;
drop table #tmp;
We can observe with the help of print
how the cursors parses even the new rows in the #tmp
table. However if we uncomment the order by t.id
in the cursor declaration - the new rows are not parsed.
Is this an intended behavior ?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…