我有一个触发器,用于注册我在表tab
中执行的更新,并将新旧值放在名为history
的表中。但是此触发器仅对简单更新有用,例如
UPDATE tab
set col1='value'
where id_tab=1
由于只有一个寄存器在id_tab
中取值1。但是,如果我想要执行像
UPDATE tab
set col1='value'
where col2=10
假设col2
有几个值为10的注册表,那么我就无法在历史表中执行注册。
我可以在触发器中添加什么?我试图放置游标,但我不太确定如何处理游标
Create table Tab
(id_tab smallint,
col1 varchar(5),
col2 varchar(5),
)
Create table History
(id_modify char(3),
old_data int,
new_data int,
)
Create trigger tr_update
on tab
after update
as
declare curs1 scroll cursor for select col2 from tab
open curs1
insert into History (id_modify,old_data,new_data)
select i.id_tab, d.col1, i.col1
from inserted i
inner join deleted d on i.id_tab = d.id_tab
fetch next from curso1
答案 0 :(得分:0)
这里不需要光标,只需按照以下步骤操作
CREATE TRIGGER tr_update
ON tab
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO History (id_modify,old_data,new_data)
SELECT i.id_tab, d.col1, i.col1
FROM inserted i
INNER JOIN deleted d ON i.id_tab = d.id_tab
END