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

Update clause in Audit Trail Trigger

我得到了这个触发器作为提示,我想知道它如何与更新一起使用。每次在我的主 table.

上有更新或插入操作时,它应该创建一条记录
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

根据我的理解,它将所有 inserted 记录插入主要 table 到审计中指定的列,包括时间戳和用户,但更新如何?如果我更新主 table 中的行会怎样?我不应该在 更新的 记录上加入吗?

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

触发器触发时没有tableupdated。在更新的情况下,您将在 table deleted 中找到主 table 中的旧值,而新值(如插入的情况下)在 table inserted.

与本例相同:

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

在这个例子中,每个员工都获得了加薪。增加前的值存储在输出 table deleted 中,新值存储在 inserted.

查看 this 以获得更好的理解。