Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
08.11.2001, 06:32
|
|||
|---|---|---|---|
|
|||
помогите с триггером |
|||
|
#18+
Помогите пжлста начинающему. Есть 2 таблицы. Изменения определенного поля передаются в из одной в другую и там добавляются. У меня происходит следующее - если проходят изменения в поле, которое указано в триггере то всё ОК, если же проходит изменение любого другого поля в первой таблице, то всегда выполняется первая часть триггера, те значение поля во второй таблице всегда уменьшается на величину поля первой таблицы. Почему триггер срабатывает если нет обновления указанного поля? CREATE TRIGGER ПриходТовара_UTrig ON dbo.ПриходТовара FOR UPDATE AS SET NOCOUNT ON /* * Меняет фактическое количество данного товара на данном складе */ If UPDATE(Количество) BEGIN Transaction UPDATE ОстаткиПоТовару Set Наличие=Наличие-deleted.Количество from deleted WHERE (ОстаткиПоТовару.КодТовара =deleted.КодТовара And ОстаткиПоТовару.КодСклада=deleted.КодСклада) COMMIT transaction UPDATE ОстаткиПоТовару Set Наличие=Наличие+inserted.Количество from inserted WHERE (ОстаткиПоТовару.КодТовара =inserted.КодТовара And ОстаткиПоТовару.КодСклада=inserted.КодСклада) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.11.2001, 07:26
|
|||
|---|---|---|---|
помогите с триггером |
|||
|
#18+
2 andrei_grigorash Я честно говоря никогда не пользовался конструкцией If UPDATE(field), а просто сравнивал значение нужного поля до обновления и после и если они не равны, тогда начинал транзакцию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.11.2001, 07:30
|
|||
|---|---|---|---|
|
|||
помогите с триггером |
|||
|
#18+
CREATE TRIGGER ПриходТовара_UTrig ON dbo.ПриходТовара FOR UPDATE AS SET NOCOUNT ON /* * Меняет фактическое количество данного товара на данном складе */ If UPDATE(Количество) >>>>>BEGIN BEGIN Transaction UPDATE ОстаткиПоТовару Set Наличие=Наличие-deleted.Количество from deleted WHERE (ОстаткиПоТовару.КодТовара =deleted.КодТовара And ОстаткиПоТовару.КодСклада=deleted.КодСклада) COMMIT transaction UPDATE ОстаткиПоТовару Set Наличие=Наличие+inserted.Количество from inserted WHERE (ОстаткиПоТовару.КодТовара =inserted.КодТовара And ОстаткиПоТовару.КодСклада=inserted.КодСклада) >>>>>END >>>>>SET NOCOUNT OFF А структура IF Update() нормально работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.11.2001, 08:17
|
|||
|---|---|---|---|
помогите с триггером |
|||
|
#18+
IF Update() работает если указанное поле фигурировало в Update или insert. Изменилось ли оно фактически - надо проверять самому. И еще - транзакции в триггере объявлять не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.11.2001, 11:58
|
|||
|---|---|---|---|
|
|||
помогите с триггером |
|||
|
#18+
Действительно, как подсказывают Moth и SergSuper, основная ошибка заключается в использовании BEGIN Transaction вместо BEGIN ... END. Но кроме того есть и другой подвох. Например, в таблице ПриходТовара изменили КодТовара или КодСклада. Если триггер не обработает эти изменения, остатки на складе будут неправильными. Поэтому правильным будет вариант с проверкой If UPDATE(Количество) or UPDATE(КодТовара) or UPDATE(КодСклада) BEGIN -- Меняет количество товара на складе ... END или с проверкой фактических изменений этих трёх атрибутов (но это совсем другая история ). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=46&mobile=1&tid=1825069]: |
0ms |
get settings: |
11ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 226ms |
| total: | 367ms |

| 0 / 0 |
