表A,有很多字段,当其中的任何字段被修改时,我需要将被修改前的值记录下来,以便查询修改记录。有以下该当可以实现
INSERT INTO IP_Dev_ChangeBak Select * FROM Deleted;
但这会将所字段保存下来,很浪费空间,我只想保存被修改的字段,不修改的字段置空。怎么实现呢,用update()一个字段一个字段地检查,代码太长了,我的表有50多个字段啊。
INSERT INTO IP_Dev_ChangeBak Select * FROM Deleted;
但这会将所字段保存下来,很浪费空间,我只想保存被修改的字段,不修改的字段置空。怎么实现呢,用update()一个字段一个字段地检查,代码太长了,我的表有50多个字段啊。
解决方案 »
- SQL 2005 订阅时快照占用空间的问题
- osql.exe -U sa -P sa -Q Select * from Port..数据库吗?读取表中的数据.
- 查询当前数据库中所有的表
- 高分求助 sql表中公式计算
- SQLSERVER允许为空字符字段 HJNAME 有部分记录为“空”既 NULL,如何 将为“空”既 NULL的记录替换为空格 ' ',我这样写,怎么没起作用呢
- sql修改省份值
- 请问SQL查询语句中如何让多列重复的记录只保留第一条记录,其它的数据正常显示
- 服务器上有4个CPU,能不能把ms sql7.0设置它使用其中的3个CPU
- 一句SQL问题,如何求两表的并集?
- SQL修改特定字段长度,谢谢
- 关于主键的问题
- 如何查询出每个姓名最新时间的数据
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
(
customerid Nchar(5) not null primary key,
keycol int not null unique
);
insert into dbo.customerdim(customerid,companyname)
output inserted.customerid,inserted.keycol
into @newcustssql2005新功能. @newcusts 表变量可以是一张表..
output 出去的可以是所有列也可以是任意一列.
用COLUMNS_UPDATED也是等同一列判断,以8列为一个单位计算在这里不适用你的值需要一列列判断是否应该赋值,用inserted/deleted是最省事的