首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

用触发器对被修改的记录进行备份解决方案

2012-03-13 
用触发器对被修改的记录进行备份表A,有很多字段,当其中的任何字段被修改时,我需要将被修改前的值记录下来,

用触发器对被修改的记录进行备份
表A,有很多字段,当其中的任何字段被修改时,我需要将被修改前的值记录下来,以便查询修改记录。有以下该当可以实现
INSERT INTO IP_Dev_ChangeBak Select * FROM Deleted;
但这会将所字段保存下来,很浪费空间,我只想保存被修改的字段,不修改的字段置空。怎么实现呢,用update()一个字段一个字段地检查,代码太长了,我的表有50多个字段啊。

[解决办法]
用inserted/deleted主健关联处理

如:以ID为主健

SQL code
INSERT INTO IP_Dev_ChangeBak Select d.ID,Col1=case when d.Col1=i.Col1 then '' else d.Col1 end,Col1=case when d.Col2=i.Col2 then '' else d.Col2 end FROM Deleted as d inner join inserted i on d.ID=i.ID
[解决办法]
SQL code
declare @newcusts table(    customerid Nchar(5) not null primary key,    keycol int not null unique);insert into dbo.customerdim(customerid,companyname)output inserted.customerid,inserted.keycolinto @newcustssql2005新功能. @newcusts 表变量可以是一张表..output 出去的可以是所有列也可以是任意一列. 

热点排行
Bad Request.