Показать сообщение отдельно
Старый 23.01.2014, 12:04   #33  
someOne is offline
someOne
Участник
Аватар для someOne
 
174 / 432 (15) +++++++
Регистрация: 11.12.2008
Адрес: Москва
Цитата:
Сообщение от MikeR Посмотреть сообщение
Для карсоты решения еще раз приведу утверждения

5 Корректный код
X++:
while select ItemId 
    from salesLine 
{ 
    select firstOnly forUpdate ItemType, ItemBuyerGroupId  
       from inventTable 
           where inventTable.ItemId == salesLine.ItemId; 
 
    If (inventTable && (inventTable.ItemType == InventItemType::Item)) 
    { 
        ttsBegin; 
        inventTable.ItemBuyerGroupId = ; 
        inventTable.update(); 
        ttsCommit; 
    } 
}
Вот до кучи еще вариант: (без всяких ttsbegin вообще)
X++:
while select ItemId 
    from salesLine
join inventTable
where inventTable.itemid == salesLine.itemId &&
inventTable.ItemType == InventItemType::Item  
{ 
        update_recordset inventTableUpd
        setting inventTableUpd.ItemBuyerGroupId = 
        where inventTableUpd.ItemId == salesLine.ItemId;
}
Кстати к вопросу о производительности БД. Множество ttsbegin --> ttscommit не всегда лучший вариант для производительности БД.

Объединение множественных обновлений в одну транзакцию - это конечно блокировки - но более производительный вариант для БД ИХМО.

Последний раз редактировалось someOne; 23.01.2014 в 12:09.
За это сообщение автора поблагодарили: mazzy (2), MikeR (3).