Вам потребуется использовать таблицы inserted
и deleted
в триггере, см. Здесь:
Использовать вставленные и удаленные таблицы
В случае таблицы update
:
inserted
: содержит новые значения столбцов строк, которые были обновлены
deleted
таблица: содержит старые значения столбцов строк, которые были обновлены
Ваш триггер может выглядеть примерно так:
create table t (id int identity, status varchar(100));
create table audit(id int, old_status varchar(100), new_status varchar(100), updated_at datetime);
create trigger StatusUpdate
on t
After UPDATE as
if (update(status)
and exists(select * from inserted i
inner join deleted d on d.id = i.id
where d.status != 'Executed'
and i.status = 'Executed'))
begin
insert into audit (id, old_status, new_status, updated_at)
select i.id, d.status, i.status, getdate()
from inserted i
inner join deleted d on d.id = i.id
where d.status != 'Executed'
and i.status = 'Executed'
end
См. Демонстрация по DB Fiddle
Демонстрация 2 - несколько строк обновляются вместе