我有一个名为“LogDelete”的表来保存有关删除任何表上任何行的用户的信息。表格字段是这样的:
create table LogDelete
(
pk int identity(1,1) primary key,
TableName varchar(15),
DeleteUser nvarchar(20),
DeleteDate datetime
)
实际上我想创建一个触发器,触发更新操作上的所有表,在每次更新时都会在LogDelete Table上写入正确的信息, 现在我使用存储过程并在我的表上的每个更新操作上调用它。 有没有办法做到这一点?
答案 0 :(得分:4)
没有。有'事件'触发器,但它们主要与loggin相关。这些类型的触发器实际上是DDL触发器,因此它们与更新数据无关,而是与更新数据库方案有关。
Afaik,每次更新都没有触发器触发。这意味着您现在通过存储过程处理它的方式可能是最好的方法。您可以在每个表上创建触发器以调用该过程并执行日志记录。
您甚至可以编写一个脚本,在一次运行中为您创建所有这些触发器。这将使触发器的初始创建和稍后更新变得更容易。
以下是一些MSDN documentation,其中(在关于DML触发器的评论中):
CREATE TRIGGER必须是批处理中的第一个语句,只能应用于一个表。
答案 1 :(得分:0)
您的请求没有神奇的解决方案,而不是event triggers
对所有DML
(INSERT
,UPDATE
,DELETE
)这样的问题。比如,但你可以考虑一些替代方案:
CDC
(Change Data Capture
),你可以从Dave Pinal的this article开始,我想这会是最好的方法,因为它不受结构变化的影响。