Пересчет курса валюты происходит в триггере TBL_CURRENCY#CHANGE_RATE таблицы TBL_CURRENCY. Большие задержки при пересчете курса у валюты, которая используется во многих товарах поставщиков, могут быть обусловлены нагрузкой на подсистему логирования при больших транзакциях.
Для ускорения процесса пересчета удобнее отказаться от одной общей транзакции и пересчитать цену согласно курса валюты по каждому товару по отдельности.
Запускаем SQL Server Enterprise Manager для СУБД SQL Server 2000 или SQL Server Management Studio для более поздних версий и находим таблицу TBL_CURRENCY.
Переходим к администрированию триггеров и открываем триггер TBL_CURRENCY#CHANGE_RATE
В указанном триггере в коде закомментируем код, который отвечает за пересчет валюты при изменении курса
Теперь осталось только настроить пользовательский скрипт, который будем вызывать для валюты, курс который нужно пересчитать. Сам текст SQL-скрипта:
Код
DECLARE @l_iCUR_ID int, @l_iSG_ID int;
SET @l_iCUR_ID = :ID;
DECLARE cSG CURSOR LOCAL FOR
Select SG_ID from TBL_SUPPLIERS_GOODS WHERE SG_CUR_ID = @l_iCUR_ID FOR UPDATE;
OPEN cSG;
FETCH NEXT FROM cSG INTO @l_iSG_ID;
WHILE (@@FETCH_STATUS <> -1)
BEGIN
UPDATE TBL_SUPPLIERS_GOODS
SET SG_CUR_ID = @l_iCUR_ID
WHERE SG_ID = @l_iSG_ID AND SG_CUR_ID = @l_iCUR_ID;
FETCH NEXT FROM cSG INTO @l_iSG_ID;
END;
CLOSE cSG;
DEALLOCATE cSG;
|