Программа iNETsHOP - обработка, сравнение, анализ прайс листов поставщиков, создание каталога товаров интернет магазина Форум - Программа iNETsHOP - Пожелания - Как ускорить изменения валюты (Справочник валют)


http://inetshop.in.ua/index.php?p=showtopic&toid=205&fid=15&area=1&print_post=893
14.04.2014 14:41

support


Support


Количество сообщений   1199
Зарегистрирован:   11-04-2008, 19:11:57
Пересчет курса валюты происходит в триггере 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;