求助各位大俠,這種情況update語句如何寫?
有兩個表invmas和invmaskd的表結構相同,index也相同,唯一鍵欄位為itnbr。由於表結構有100多個欄位,現在要用invmaskd更新invmas請問如何用update表達???
多謝!! 原帖由 dintan 于 2008-1-23 08:09 发表 http://bbs.chinaunix.net/images/common/back.gif
有兩個表invmas和invmaskd的表結構相同,index也相同,唯一鍵欄位為itnbr。
由於表結構有100多個欄位,現在要用invmaskd更新invmas請問如何用update表達???
多謝!!
一定要用update么?
给我感觉是你需要更新的栏位太多了。你不想一一写。其实可以用一个简单的脚本生成这个update语句。
如果可以用其他的办法。
select itnbr
from invmas
into temp tmp_invmas
;
delete from invmas
;
insert into invas
select
a.*
from invmaskd a, tmp_invmas b
where a.itnbr = b.itnbr
;
回复 #2 ivhb 的帖子
多謝,大俠!其實我也想到用delete表後,再insert,
但是由於invmas比較重要,而且系統一直在使用,且資料較多,如果delete的話,會影響系統使用的。
我是設想如果用update的話,至少系統還可以用 en。你可以用如下的步骤完成。
1. 建立一个表 invmas_1, 结构和invmas_1一样,包括约束,索引,primary key... (就是完全一样)
2.
insert into invmas_1
select
a.*
from invmaskd a, tmp_invmas b
where a.itnbr = b.itnbr
;
rename table invmas to invmas_bak;
rename table invmas_1 to invmas;
这个时间窗口应该很小。基本上不会影响到其他人。
如果你还是坚持要用update,那么你可能需要用一个procedure来做这个事情。
一次更新一条记录,然后提交。尽可能的缩短每次锁表的时间。
因为可能有其他的程序在实现上已经设定了wait的时间。超时导致访问失败,也是
影响了别人的使用。
以上建议仅供参考。个人倾向于先生成。然后rename。
回复 #4 ivhb 的帖子
多謝,我想用此方法是最好的辦法啦!! 原帖由 dintan 于 2008-1-23 17:03 发表 http://bbs.chinaunix.net/images/common/back.gif多謝,我想用此方法是最好的辦法啦!!
当然这个方法也有些坏处..就是如果原表有update操作..新表将丢失部分信息........
页:
[1]