Sql server 表添加了sql server的更新

Sql server 表添加了sql server的更新,sql-server,triggers,sql-update,Sql Server,Triggers,Sql Update,我有table选项卡,我想创建一个表历史记录来插入我在tab table中所做的更新。为此,我创建了触发器tru更新,但它不能正常工作 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 o

我有table选项卡,我想创建一个表历史记录来插入我在tab table中所做的更新。为此,我创建了触发器tru更新,但它不能正常工作

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)

触发器与数据集一起工作,这意味着SetInsertedDeletedCan包含多行,而简单的赋值将不起作用。相反,您可以使用INSERTED和deletedas源表,并在需要新数据和旧数据时连接它们,如本例所示

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_数据字段似乎只有3个字符宽,而原始表中的id_数据字段只有5个字符宽。这可能行不通;历史记录表中的字段大小必须相同或更宽,否则服务器将不允许插入,因为数据可能被截断。

如所述。此外,您可能希望澄清它不能正常工作的含义。