Показать сообщение отдельно
Старый 22.02.2011, 08:17   #27  
AvrDen is offline
AvrDen
Участник
 
134 / 26 (1) +++
Регистрация: 04.08.2005
Адрес: Усть-Каменогорск
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Интересно было бы создать тестовый проектик
Попробуйте запустить следующий job(recId только свой подставьте ) и посмотреть в Журнале трассировки операторов SQL план запроса
X++:
static void Job17(Args _args)
{
    InventJournalTrans  inventJournaltrans;
    InventDim           inventDim;
    InventTable         inventTable;
    InventItemBarcode   inventItemBarcode;
    ;
    ttsbegin;
    select forupdate inventJournaltrans
        where inventJournaltrans.RecId == 5637149414
        join inventDim
        where inventDim.inventDimId == inventJournaltrans.InventDimId
        join inventTable
        where inventTable.ItemId == inventJournaltrans.ItemId;

        inventJournaltrans.CostAmount = 8933.72;
        inventJournaltrans.update();
    ttscommit;
}
У меня получился следующий план запроса:

UPDATE INVENTJOURNALTRANS SET COSTAMOUNT=8.93372E3,RECVERSION=702523288 WHERE (((DATAAREAID=N'mhv') AND (RECID=5637149414)) AND (RECVERSION=902287041))

Как видно CostAmount представлен в экспоненциальном виде и SQL воспринимает его как 8933.719999999999

Удалив из job таблицу Inventtable

X++:
static void Job17(Args _args)
{
    InventJournalTrans  inventJournaltrans;
    InventDim           inventDim;
    InventTable         inventTable;
    InventItemBarcode   inventItemBarcode;
    ;
    ttsbegin;
    select forupdate inventJournaltrans
        where inventJournaltrans.RecId == 5637149414
        join inventDim
        where inventDim.inventDimId == inventJournaltrans.InventDimId;

        inventJournaltrans.CostAmount = 8933.72;
        inventJournaltrans.update();
    ttscommit;
}
получим план запроса

UPDATE INVENTJOURNALTRANS SET COSTAMOUNT=?,RECVERSION=? WHERE (((DATAAREAID=?) AND (RECID=?)) AND (RECVERSION=?))