
表中有item_no,item_subo 两个字段
这个表中有5万行数据
其中有8000行数据的item_no<>item_subo
现在要将item_no<>item_subo的这8000行数据修改为item_no=item_subo
同时还有45个表,并且这45个表中都有item_no字段,要将这45个表中的item_no同步更新,有什么办法可以解决吗?
一、临时表法
1、select item_no, item_subo into TT_diff from ASC001 where item_no <> item_subo
必要时,在TT_diff上建立索引,银掘如create index I_TT_item_no on TT_diff( item_no )
2、针对ASC001以及另外的45个表,各自执行如下命令:
update 表 set t.item_no = x.item_subo from 表 t, TT_diff x where t.item_no = x.item_no
3、drop table TT_diff
二、触发器法
1、在ASC001上建立如下触发器
create trigger TR_update_item_no
on ASC001
for update
as
begin
if update( item_no ) then
begin
-- 针对45个表,重复如下框架的命令
update 表
set t.item_no = i.item_no
from 表 t, inserted i, deleted d
where t.item_no = i.item_no
and i.item_no <> d.item_no
end
end
2、执行命令,使触发器逻辑发生作用
update ASC001 set item_no = item_subo where item_no <> item_subo
3、删除触发器
drop trigger TR_update_item_no
说明:若采用第二种方法,当ASC001上已经有触发器的时候,需要先保存其脚本,干完这个活儿后再恢复,并且,所有改变发生在一个事务中,要求日前搏岩志慧御空间得足够大。