Триггер SQL Server при вставке, удалении и обновлении таблицы
у меня есть таблица Product
и еще один стол ProductLog
.
таблица журнала должна отслеживать два столбца в Product
таблица. Каждый раз, когда в этих столбцах есть вставка, обновление или удаление, мне нужно обновить таблицу журнала.
мне нужно написать три отдельных триггера или один триггер может обрабатывать эти операции?
мне также нужно знать тип операции, например, мне нужно будет знать, была ли запись в таблице журнала из-за insert или удалить или обновить. Если кто-нибудь даст мне пример, это будет здорово.
2 ответов
вам нужен только один триггер
CREATE TRIGGER [ProductAfter] ON [Product] AFTER INSERT, UPDATE, DELETE
вы можете определить, какой оператор DML триггер на основе количества записей в inserted
и deleted
таблицы, доступные в теле триггера. Для INSERT
, deleted
пусто, ибо DELETE
, inserted
пустой, для UPDATE
и inserted
и deleted
не пустые. Например,
IF @@ROWCOUNT = 0 -- exit trigger when zero records affected
BEGIN
RETURN;
END;
DECLARE @type CHAR(1);-- 'U' for update, 'D' for delete, 'I' for insert
IF EXISTS(SELECT * FROM inserted)
BEGIN
IF EXISTS(SELECT * FROM deleted)
BEGIN
SET @type ='U';
END
ELSE
BEGIN
SET @type ='I';
END
END
ELSE
BEGIN
SET @type = 'D';
END;
кроме того, взгляните на Отслеживание Изменений Данных, есть еще один вариант для отслеживания изменений без провоцирующие факторы.
или просто
DECLARE @type CHAR(1)=
case when not exists(SELECT * FROM inserted)
then 'D'
when exists(SELECT * FROM deleted)
then 'U'
else
'I'
end