审计跟踪触发器中的更新子句

时间:2016-04-25 11:42:24

标签: tsql triggers audit-trail

我将此触发器作为提示,我想知道它如何与更新一起使用。每次在我的主表上有更新或插入操作时,它都应该创建一条记录。

create trigger tblTriggerAuditRecord on tblOrders
after **update, insert**
as
begin
insert into tblOrdersAudit 
(OrderID, OrderApprovalDateTime, OrderStatus, UpdatedBy, UpdatedOn )
select i.OrderID, i.OrderApprovalDateTime, i.OrderStatus, SUSER_SNAME(), getdate() 
from  tblOrders t 
inner join **inserted** i on t.OrderID=i.OrderID 
end
go

根据我的理解,它将所有插入记录插入到主表中的审计中包含的时间戳和用户,但更新如何?如果我更新主表中的行怎么办?我不应该在更新的记录上加入吗?

希望我的问题很清楚,非常感谢你的帮助!

1 个答案:

答案 0 :(得分:0)

触发触发器时没有表updated。如果有更新,您可以在表deleted中找到主表中的旧值,并在表inserted中找到新值(如插入的话)。< / p>

这与此示例中的相同:

UPDATE tabEmployee SET Salary = Salary * 1.05
OUTPUT inserted.EmployeeName, deleted.Salary, inserted.Salary
INTO tabSalaryHistory (EmployeeName, OldSalary, NewSalary)

在这个例子中,每个员工都有加薪。增加前的值存储在输出表deleted中,新值存储在inserted中。

请查看this以便更好地理解。