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