关于数据库中表同时更新的解决方法

    数据库中表的同时更新应该是比较常见的,因为我们在开发关于数据库系统的时候大多数时候都是

很多表有关联的,所以要更新一个表时,很多时候都要同时对其它一些表做操作,在我的工作中常遇到的

是同步新增,同步删除,同步更新等,一般我们采取的是触发器,这些操作常不需要对表的结构做什么修改

,而现在遇到的问题却不是这样的,下面看问题:
    问题提出:表table1有88703个记录,而且没有相同的记录,有唯一的主键,表table2有1992个记录,

其中table2的记录都来自于table1,那么分别在table1和table2中添加一个唯一能标识每个记录的id,

而且id这一列要在第一列.
    问题分析:现假设table1,table2有四列分别是a,b,c,d,其中a为主键,现在要在这两个表添加一列为

id,使添加后table1和table2的关系保持不变,即table2的id也是来自table1的,由于数据较多,所以要考

虑到效率问题,这样我们可以用游标实现,关于添加一列而且要在第一列这个问题应该不难,下面看解决

方案.
   解决方案:首先向表table1和table2添加一列id

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->alter table table1 add id int identity(1, 1)
alter table table2 add id int

  将它设为第一列

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->sp_configure 'allow updates',1
RECONFIGURE WITH override
go
UPDATE syscolumns SET colid=colid+1
WHERE id=object_id('table1 ')
update syscolumns set colid=1
where id=object_id('table1 ') and name='id'
go
sp_configure
'allow updates',0
RECONFIGURE WITH override

table2的设置方法也一样,只要将table1换为table2就行了, 其实还要其它方法可以实现的,如用临时表

等,这里就不再说明,有兴趣不防去试一下,下面就是要实现更新table2,使table2中的id和table1中的id

同步,这里用游标实现:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->declare mycursor cursor for 
select table1.id,table2.id,table1.a,table2.a from table2
left join table1 on table1.a = table2.a
open mycursorfetch next from mycursor
while @@fetch_status =0
begin
update table2 set table2.id = table1.id from table1
where table2.a= table1.a
fetch next from mycursor
end
close mycursor
deallocate mycursor

到现问题已经解决了,可能还有其它更好的方法,但我这样实现应该说效率是比较高的.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值