Показать сообщение отдельно
Старый 05.04.2011, 18:38   #8  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от Hyper Посмотреть сообщение
Разумеется, одной транзакцией этого делать нельзя.
Почему "разумеется"? Иногда можно, иногда даже нужно, иногда нельзя. Зависит от ситуации.

Цитата:
Сообщение от Hyper Посмотреть сообщение
да, если делать отдельный ttsbegin/ttscommit для каждой записи, все вроде работает. ...Но мне почему-то казалось, что групповое обновление записей (скажем, 500 или 1000 в одной транзакции) на больших объемах даст ощутимый прирост производительности...И вот такой вот код уже не работает:
А как-нибудь вот так?

X++:
    Table1 table1Loop;
    Table1 table1;
    int bulk = 5000;    // 5;
    int i;
;
    while select table1Loop
        order by recId
    {
        if (i==0)
            ttsbegin;
        i++;
        table1 = Table1::findRec(table1Loop.RecId, true);
        table1.Field1 =  strfmt("Blah %1", i);
        table1.doupdate();
        if (i mod bulk == 0)
        {
            ttscommit;
            ttsbegin;
        }
    }

    if (i>0)
        ttscommit;