审计跟踪触发器中的更新子句
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 以获得更好的理解。
我得到了这个触发器作为提示,我想知道它如何与更新一起使用。每次在我的主 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 以获得更好的理解。