Цитата:
Сообщение от
oip
А как-нибудь вот так?
Перепроверил - получилось, спасибо. Обидно, правда, что куча времени теряется на внутренний select:
X++:
table1 = Table1::findRec(table1Loop.RecId, true);
Подумалось, может быть сделать что-то вроде следующего:
X++:
Table1 table1;
int bulk = 5000; // 5;
RecId lastRecId;
int i;
;
do
{
i = 0;
ttsbegin;
while select forupdate table1
order by RecId
where table1.RecId > lastRecId
{
table1.Field1 = strfmt("Blah %1", i);
table1.doupdate();
lastRecId = table1.RecId;
i++;
if (i >= bulk)
break;
}
ttscommit;
}
while (i >= bulk);
Выглядит оптимальным решением, нет? Правда, работать будет быстро только при наличии уникально индекса по одному полю. Сейчас попробую.