Триггер при удалении записи

Необходимо сделать триггер , который при удалении записи из таблицы занесет эту запись в таблицу архив. Я делал так

create trigger yyy on Выпуски_журналов
for delete as

declare @Идефикатор int;
select @Идефикатор = Идентификатор_выпуска from Выпуски_журналов;
begin
if @Индефикатор in (select Индентификатор_выпуска  from Выпуски_журналов where Year(CURRENT_TIMESTAMP)=Год)

    insert into Выпуски_журналов_архив values((select  Идентификатор_выпуска from Выпуски_журналов ),
    (select  id_журнала from Выпуски_журналов ),
    (select  Номер_выпуска from Выпуски_журналов ),
    (select Год from Выпуски_журналов )
    );

else
    ROLLBACK TRANSACTION;
    PRINT 'вы не можете удалить этот выпуск'

end;

Удаляю так

delete Выпуски_журналов
where (Идентификатор_выпуска=48)

Из основной таблицы запись удаляется , но в таблицу архив вносится последняя запись в таблице(например хочу удалить выпуск с Идентификатором 48 , из основной таблицы удаляется правильная завпись , но в таблицу архив заносится запись с Индентификатором 52(последняя запись в таблице)) Может кто-то знает почему так происходит?


Ответы (1 шт):

Автор решения: Akina

Необходимо сделать триггер , который при удалении записи из таблицы занесет эту запись в таблицу архив.

Демка:

CREATE TABLE t1 (id INT, val INT);
CREATE TABLE t2 (id INT, val INT);
INSERT INTO t1 VALUES (1,11), (2,22), (3,33);
CREATE TRIGGER tr
ON t1
FOR DELETE 
AS
INSERT INTO t2 SELECT * FROM DELETED;
SELECT * FROM t1;
SELECT * FROM t2;
id val
1 11
2 22
3 33
id val
DELETE FROM t1 WHERE id > 1;
SELECT * FROM t1;
SELECT * FROM t2;
id val
1 11
id val
3 33
2 22

fiddle

→ Ссылка