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

Откуда:
Сообщений: 388
Добрый вечер!

Создал триггер "ON tblProducts AFTER INSERT,UPDATE,DELETE"

Так как триггер работает сразу для всех режимов INSERT,UPDATE,DELETE, то возникает вопрос, как внутри триггера определить какая именно операция инициировала работу триггера?

Общая задача:
Если происходят любые операции изменения данных в основных 8 таблицах, то нужно сделать запись в таблицу отложенных заданий о сделанных изменениях.

Таблица отложенных заданий имеет вид:
ID	numeric(18, 0)
MainDateTime	datetime
TableName	nvarchar(250)
RowID	uniqueidentifier
OperationCode	char(1)

Триггер должен создавать записи в этой таблице, с указанием времени операции (MainDateTime), имени таблицы (TableName), идентификатора записи (RowID), кода операции I или U или D (OperationCode). Триггер должен отрабатывать и на пакетных обновлениях, когда обновляются сразу много строк.

Вот и не могу понять как же определить текущую операцию. Теоретически,
если данные только в INSERTED, то вставка,
если данные есть и в INSERTED и в DELETED, то обновление,
если данные только в DELETED то удаление

Может есть более лёгкий (с точки зрения производительности) способ определения типа операции?

Automatic intellegance a task of generations ...
20 июл 09, 18:05    [7437233]     Ответить | Цитировать Сообщить модератору
 Re: Как определить режим работы триггера?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36808
Напишите три триггера и не изобретайте велосипед, который тут каждую неделю пытаются изобрести.

З.Ы.
если данные только в INSERTED, то вставка,
если данные есть и в INSERTED и в DELETED, то обновление,
если данные только в DELETED то удаление
если данных нету ни там ни там, то попадос.

Сообщение было отредактировано: 20 июл 09, 18:23
20 июл 09, 18:22    [7437296]     Ответить | Цитировать Сообщить модератору
 Re: Как определить режим работы триггера?  [new]
dVirt
Member

Откуда:
Сообщений: 388
Гавриленко Сергей Алексеевич,

Тоесть Вы предлагаете написать 3 триггера вместо одного только потому, что определить текущую операцию нельзя? Мой алгоритм не верен?
20 июл 09, 18:27    [7437312]     Ответить | Цитировать Сообщить модератору
 Re: Как определить режим работы триггера?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36808
dVirt
Гавриленко Сергей Алексеевич,

Тоесть Вы предлагаете написать 3 триггера вместо одного только потому, что определить текущую операцию нельзя? Мой алгоритм не верен?
Ваш алгоритм не во всех случаях даст ответ, какая операция вызвала триггер.
20 июл 09, 18:52    [7437378]     Ответить | Цитировать Сообщить модератору
 Re: Как определить режим работы триггера?  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
dVirt
Гавриленко Сергей Алексеевич,

Тоесть Вы предлагаете написать 3 триггера вместо одного только потому, что определить текущую операцию нельзя? Мой алгоритм не верен?
Вот, недавно выкопали древнюю тему
Кроме этого, многократно обсуждалось -> имеет смысл поискать.
20 июл 09, 20:07    [7437524]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить