表添加了更新sql server

时间:2014-09-23 23:28:52

标签: sql-server triggers sql-update

我有表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)

1 个答案:

答案 0 :(得分:0)

触发器可以处理数据集,这意味着集合inserteddeleted可以包含多行,并且简单的赋值将不起作用。相反,您可以使用inserteddeleted作为源表(如果您想要新旧数据,请加入它们,如本例所示)。

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个字符宽。这可能行不通;历史记录表中的字段需要具有相同的大小(或更宽),否则服务器将不允许插入,因为数据可能会被截断。