2016-04-25 66 views
0

我将此触发器作为提示,我想知道它如何与更新配合使用。它应该创建一个记录,每当我的主表有更新或插入操作时。审计跟踪触发器中的更新子句

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 

从我的理解,它插入所有插入记录到主表在审计中陈述列,包括时间戳和用户但如何更新?如果我更新主表中的行,该怎么办?我不应该在更新记录上有一个问题吗?

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

回答

0

触发器被触发时没有表updated。在更新的情况下,主表中的旧值可以在表deleted中找到,新表中的值(如插入的情况下)在表inserted中。

这是一样在这个例子:

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

在这个例子中,每一位员工获得加薪。增加前的值存储在输出表deleted中,并将新值存储在inserted中。

看看this为更好的理解。

+0

好吧,完美diiN_非常感谢您的解释,我不知道! –

+0

完成! :) 再次感谢 –