2016-04-25 44 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

完成! :) 再次感謝 –