День добрый всем!
Упрощенно задача такова:
нужно в таблицу вставлять записи , копирующие имеющиеся , но с изменением некоторых полей. Причем подлежат копированию записи , для которых измененных еще не существует .
пишем SP
/* выбираем записи по вышеописанным условиям*/
for select ... from table1 where .... and not exists(select .. from table1 where ...) into .... получаем (ключевые поля записи)
do
begin
insert into table1 ...
end
ПРОБЛЕМА:такое ощущение что после первого инсерта в теле цикла выборка изменяется !!! и часть записей оказывются не скопированными.
По моему разумению выборка должна быть статичной в течение всего цикла.Все-таки запрос каждый раз перевыполняется или нет ?
ХП селектит таблицу и одновременно инсертит в нее. проблема
не order by, а plan sort. записи сначала сортируются, а потом по ним идет перебор. В первоначальном варианте у тебя шел сразу перебор записей, куда ты добавлял данные. Сервер не гарантирует, что будет записывать данные всегда "в конец" таблицы. данные пишутся на свободное место.Order By влияет на всевидящее око запроса