Сделайте триггер, чтобы активировать только если обновлен определенный столбец - PullRequest
0 голосов
/ 20 января 2020

Я пытаюсь создать триггер, который срабатывает только при обновлении определенного столбца, и только при обновлении столбца до «Выполнено». Я могу обновить, если столбец изменен, но я не могу найти способ обновить, если столбец обновлен до «Выполнено»

CREATE TRIGGER dbo.NewTrigger
   ON  dbo.Database
   AFTER UPDATE
AS 
IF Update(Status) = 'Executed'

    BEGIN 
--MY insert into statement.  This adds data to another table, but I only want the whole process to run if the original table column "Status" is set to "Executed"

END

Может кто-нибудь помочь, пожалуйста?

1 Ответ

1 голос
/ 20 января 2020

Вам потребуется использовать таблицы 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 - несколько строк обновляются вместе

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...