Почему курсор, открытый для выбора с помощью 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 в объявлении курсора - новые строки не анализируются.

Это намеренное поведение?

Ответы на вопрос(3)

Ваш ответ на вопрос