2016-04-25 2 views
0

Я получил этот триггер как подсказку, и я хотел бы знать, как это работает с обновлениями. Предполагается создать запись каждый раз, когда в моей основной таблице есть обновление или вставка.Пункт обновления в Trigger 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 

В моем понимании, он вставляет все вставленные записей в основной таблице указанных столбцов в аудите, включая метки времени и пользователя, но как об обновлении? Что делать, если я обновляю строки в моей основной таблице? не должен ли я иметь joing также на обновленных записей?

Надеюсь, мой вопрос ясен, спасибо за помощь!

ответ

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

Сделано! :) Еще раз спасибо –

Смежные вопросы