Почему курсор, открытый для выбора с помощью ORDER, не отражает обновления в следующей таблице
Я показал этот маленький пример странного поведения
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;
Мы можем наблюдать с помощьюprint
как курсоры анализируют даже новые строки в#tmp
Таблица. Однако если мы раскомментируемorder by t.id
в объявлении курсора - новые строки не анализируются.
Это намеренное поведение?