Показать сообщение отдельно
Старый 05.04.2011, 16:53   #3  
Hyper is offline
Hyper
Участник
Соотечественники
 
163 / 29 (1) +++
Регистрация: 09.10.2003
Кстати, да, если делать отдельный ttsbegin/ttscommit для каждой записи, все вроде работает. Я, наверное, на этом и остановлюсь.

X++:
Table1 table1Loop;
Table1 table1;
int i;
;


while select table1Loop
{
    i++;
    ttsbegin;
    table1 = Table1::findRec(table1Loop.RecId, true);
    table1.Field1 = strfmt("Blah %1", i);
    table1.doupdate();
    ttscommit;
}

Но мне почему-то казалось, что групповое обновление записей (скажем, 500 или 1000 в одной транзакции) на больших объемах даст ощутимый прирост производительности. Я не прав?

И вот такой вот код уже не работает:

X++:
Table1 table1Loop;
Table1 table1;
int bulk = 5000;    // 5;
int i;
;

ttsbegin;

while select table1Loop
{
    i++;
    table1 = Table1::findRec(table1Loop.RecId, true);
    table1.Field1 = strfmt("Blah %1", i);
    table1.doupdate();

    if (i mod bulk == 0)
    {
        ttscommit;
        ttsbegin;
    }
}
Та же проблема, которую я первоначально описал.