我有表tab
,我想创建一个表History
来插入我在tab
表中所做的更新。为此,我创建了触发器tr_update
,但它无法正常工作。
Create table Tab
(
id_tab char(5),
data_tab int
)
Create table History
(id_modify char(3),
old_data int,
new_data int,
)
Create trigger tr_update
on tab
after update
as
declare @id char(3)
declare @old int
declare @new int
select @id=id_tab, @new=data_tab from inserted
select @old=data_tab from deleted
insert into History (id_modify,old_data,new_data)
values (@id,@old,@new)
答案 0 :(得分:0)
触发器可以处理数据集,这意味着集合inserted
和deleted
可以包含多行,并且简单的赋值将不起作用。相反,您可以使用inserted
和deleted
作为源表(如果您想要新旧数据,请加入它们,如本例所示)。
Create trigger tr_update
on tab
after update
as
insert into History (id_modify,old_data,new_data)
select i.id_tab, d.data_tab, i.data_tab
from inserted i
inner join deleted d on i.id_tab = d.id_tab
在旁注中,似乎历史表中提交的id_data
仅为3个字符宽,而原始表格为5个字符宽。这可能行不通;历史记录表中的字段需要具有相同的大小(或更宽),否则服务器将不允许插入,因为数据可能会被截断。