Как создать триггер, который использует события INSERT, DELETE, UPDATE - PullRequest
4 голосов
/ 29 декабря 2011

Я хочу создать триггер для ведения журнала. Поэтому мне нужны имена событий INSERT, UPDATE или DELETE.ie: один из этих операторов используется при выполнении запроса, мой триггер сработает и начнет запись.

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER LogBuses 
 ON  Bus_table 
 AFTER INSERT,DELETE
 AS 
BEGIN
DECLARE @PlateNo nvarchar(50)
IF INSERT//something like that-INSERTING- DELETING
    SELECT @PlateNo=PlateNo from inserted
insert into Logger (EffectedTable,ActionName,EffectDate,EffectedID) 
VALUES ('Bus_table','Insert',SYSDATETIME (),@PlateNo);
ELSE IF DELETE 
    SELECT @PlateNo=PlateNo from deleted
insert into Logger (EffectedTable,ActionName,EffectDate,EffectedID) VALUES ('Bus_table','Insert',SYSDATETIME (),@PlateNo);

END GO

Ответы [ 2 ]

9 голосов
/ 29 декабря 2011

Вы используете таблицы inserted и deleted. Он вставляется, если заполнена только таблица inserted, удаляется, если заполнена только таблица deleted, и обновляется, если заполнены обе таблицы. Для проверки используйте if exists (select 1 from inserted).

if exists (select 1 from inserted) and exists (select 1 from deleted)
--update
else if exists (select 1 from inserted)
--insert
else if exists (select 1 from deleted)
--delete
1 голос
/ 29 декабря 2011

Создайте хранимую процедуру, которая регистрирует и запускает каждое событие, которое вызывает процедуру, передавая необходимые данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...