关于数据库中表同时更新的解决方法
2008-11-04 10:32
281 查看
数据库中表的同时更新应该是比较常见的,因为我们在开发关于数据库系统的时候大多数时候都是
很多表有关联的,所以要更新一个表时,很多时候都要同时对其它一些表做操作,在我的工作中常遇到的
是同步新增,同步删除,同步更新等,一般我们采取的是触发器,这些操作常不需要对表的结构做什么修改
,而现在遇到的问题却不是这样的,下面看问题:
问题提出:表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
将它设为第一列
table2的设置方法也一样,只要将table1换为table2就行了, 其实还要其它方法可以实现的,如用临时表
等,这里就不再说明,有兴趣不防去试一下,下面就是要实现更新table2,使table2中的id和table1中的id
同步,这里用游标实现:
到现问题已经解决了,可能还有其它更好的方法,但我这样实现应该说效率是比较高的.
很多表有关联的,所以要更新一个表时,很多时候都要同时对其它一些表做操作,在我的工作中常遇到的
是同步新增,同步删除,同步更新等,一般我们采取的是触发器,这些操作常不需要对表的结构做什么修改
,而现在遇到的问题却不是这样的,下面看问题:
问题提出:表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
alter table table1 add id int identity(1, 1) alter table table2 add id int
将它设为第一列
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
同步,这里用游标实现:
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
到现问题已经解决了,可能还有其它更好的方法,但我这样实现应该说效率是比较高的.
相关文章推荐
- 关于error C2471:无法更新程序数据库的错误的解决方法
- 关于error C2471:无法更新程序数据库的错误的解决方法
- asp中关于数据库无法更新问题的解决方法
- 关于asp.net网站发布后,使用登录控件和注册控件时出现“数据库只读,无法进行数据更新”的解决方法
- (应用程序无法正常启动0xc0000142) 关于win10周年版更新后无法正常使用vc6.0问题的解决方法
- Access “不能更新 数据库或对象为只读”的解决方法
- 开发环境下调试没有问题,发布后运行却提示无法更新数据库 *.MDF,因为数据库是只读的解决方法
- PHP中用set_time_limit(0)长连接的实现--更新数据库时间限制中断解决方法
- 关于MDK(KELI)下stlink仿真不能实时更新数据的解决方法
- 关于SVN更新慢的解决方法
- php 更新数据库中断的解决方法
- 【SQL】关于低版本SQL附加高版本数据库(ERROR:948)的解决方法
- php 更新数据库中断的解决方法
- Mysql 数据库更新错误的解决方法
- ACCESS删除datagridview和数据库中的一条数据,同时更新显示的方法源码
- 关于启动数据库后提示ora-12505的解决方法
- 关于WordPress中新增分类目录提示“无法向数据库中插入条目”的解决方法
- MySQL中同时存在创建和上次更新时间戳字段解决方法浅析
- sybase 数据库不能更新系统表,报错的解决方法
- 关于EXCEL导入数据库的解决方法