Триггер вставки второй строки при обновлении той же таблицы - PullRequest
0 голосов
/ 10 января 2020

Таблица TMSEMP хранит информацию о сотрудниках c. Таблица CHANGES предназначена для регистрации изменений в этой таблице.

Триггер ниже находится на TMSEMP для записи этих изменений, когда для CHANGEFLAG установлено значение Y.

ALTER TRIGGER [XUSER].[Update_Changes Table] 
ON [XUSER].[TMSEMP]
AFTER INSERT, UPDATE
AS

declare @empref as varchar(10)
declare @date1 as Datetime
declare @changeflag as varchar (10)
declare @firstnames as varchar(20)

set @empref = (select empref from inserted)
set @date1=(select getdate())
set @changeflag =(select changeflag from inserted )
set @firstnames = (select firstnames from inserted)

if @changeflag='Y'
begin

-- INSERT INTO CHANGES TABLE
insert into XUSER.CHANGES (empref,autokey,changedate,changefield,newvalue) 
select @empref, (select max(autokey)+1 from XUSER.changes),@date1,'FIRSTNAMES',@firstnames 

--RESET CHANGEFLAG BACK TO N
update XUSER.tmsemp set changeflag='N' where empref=@empref

end

Проблема У меня есть, что 2 записи пишутся в ИЗМЕНЕНИЯ.

Если я удаляю приведенную ниже

--RESET CHANGEFLAG BACK TO N
    update XUSER.tmsemp set changeflag='N' where empref=@empref

1 запись отправлена ​​правильно -> Однако поле остается как Y, но должно быть N.

Как я могу остановить запись публикуется дважды.

AUTOKEY CHANGEFIELD CHANGEDATE  NEWVALUE
9   FIRSTNAMES  2020-01-09 20:51:02.493 Shane5
10  FIRSTNAMES  2020-01-09 20:51:02.607 Shane5

1 Ответ

0 голосов
/ 10 января 2020

Создан триггер после вставки и после обновления. Удалите выделенное ключевое слово update .

and

...