Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 MSSQL:Update таблицу внутри UPDATE триггера этой же таблицы,как избежать бесконечную цикл?  [new]
max aka max
Member

Откуда:
Сообщений: 204
Доброго дня всем!

есть такая задача:

есть таблица товаров накладных, с полями:
1. Товар,
2. Тип операции,
3. Количество,
4. Цена,
5. Сумма

Есть триггер ON UPDATE к этой таблице, который будет CURSOR ом проходить по всем обновленным записям и если Тип операции равно на РАСХОД, то обновляет поле "ЦЕНА" с актуальной ценой товара на этот момент (получает цену на основе всех приходов и расходов по товару через определенную функцию).
Проблема: при этом обновлении поле ЦЕНА триггер срабатывает уже рекурсивно.

Вопрос: Как можно избежать этого с учетом того что в данную таблицу может писать множество пользователей (это я к тому что если отключить триггер UPDATE после входа к нему и потом после всех операций включить, то другой пользователь в этот момент может апдейтить таблицу и триггер не срабатывает, что приведет к образованию операций с неправильными ценами) ?

Спасибо за внимание.
22 июн 15, 13:23    [17801809]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL:Update таблицу внутри UPDATE триггера этой же таблицы,как избежать бесконечную цикл?  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
max aka max, TRIGGER_NESTLEVEL.
22 июн 15, 13:33    [17801846]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL:Update таблицу внутри UPDATE триггера этой же таблицы,как избежать бесконечную цикл?  [new]
Baccardi
Member

Откуда: Оттуда
Сообщений: 117
max aka max, если нет необходимости в рекурсивных триггерах совсем - можно отключить настройку бд RECURSIVE_TRIGGERS
23 июн 15, 12:51    [17806211]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL:Update таблицу внутри UPDATE триггера этой же таблицы,как избежать бесконечную цикл?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
Наилучшее решение - это отказаться от прямого доступа к таблице и сделать обновление контролируемым, т.е. через процедуру.
23 июн 15, 13:15    [17806395]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить