【发布时间】:2017-09-01 09:47:57
【问题描述】:
我想在这个问题中实现的是,如果我在我的表的 1 中进行了任何更新/删除/插入,它应该将该记录插入到表的 1 中以用于日志目的
我有 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 和 updatetime,但是如何获取 action 列,比如执行了什么操作如何实现。谁能给点线索
【问题讨论】:
-
您的触发器有 MAJOR 缺陷,因为您似乎认为它会每行调用一次 - 那是不是 b> 情况。触发器将每条语句触发一次,因此如果您的语句影响 25 行,您将触发触发器一次,然后
Inserted和/或Deleted每个伪表将包含 25 行。您的代码将在这 25 行中选择哪一行?SELECT @id = i.id FROM Inserted i- 这是不确定的。您需要重写触发器以考虑到这一点! -
@Red Devil 对哪个 MySQL 版本有效,因为我只收到“插入后更新删除”语句的语法错误。
标签: sql sql-server triggers sql-server-2012