我想在这个问题中实现的是,如果我在表格中的任何一个中进行了任何更新/删除/插入,它应该将该记录插入表中的1个以用于日志目的
我有一张表作为测试。假设如果我在表测试中插入下面的行,它应该触发一个触发器并在我的另一个表中插入一行,即日志
测试
Id | Name | Location
1 | Test | America
登录
ID | updatetime | Action
----------------------------------------------------------
1 | 2017-04-06 16:51:18.190 | Insert
同样,如果我删除或更新任何行动,它应该分别删除或更新
ID | updatetime | Action
----------------------------------------------------------
1 | 2017-04-06 16:51:18.190 | Insert
1 | 2017-04-06 16:51:18.190 | Delete
我创建了一个触发器
create trigger abc
on test
after insert, update, delete
as
begin
declare @id int
select @id = i.id from inserted i
insert into log values (@id, GETDATE())
end
从上面的触发器中我可以获得ID和更新时间,但是如何获取动作列,就像执行了什么动作一样。任何人都可以有线索
答案 0 :(得分:2)
您可以创建下一个方法来确定发生的操作: -
DECLARE @Action as char(1);
SET @Action = (CASE WHEN EXISTS(SELECT * FROM INSERTED)
AND EXISTS(SELECT * FROM DELETED)
THEN 'U' -- Set Action to Updated.
WHEN EXISTS(SELECT * FROM INSERTED)
THEN 'I' -- Set Action to Insert.
WHEN EXISTS(SELECT * FROM DELETED)
THEN 'D' -- Set Action to Deleted.
END)
-- For Getting the ID
if @Action = 'D'
select @id=i.id from DELETED i
else -- Insert or Update
select @id=i.id from INSERTED i