研究好久的问题,总找不合适的结决方案,请各位高手再次指点指点

zhf_1021 2006-09-12 10:50:16
具体问题如下:
前提:有两个数据库A和B,其库结构完全相同,其中大概有近100个表,包含主键或自增列以及blob字段。有些自增列同时也是主键,有些自增列被作为外键使用
要求:将A库中的数据导入到B库中,对于B库中已被导入的数据,也就是旧数据不再导入
困难:1.如何区分新旧数据;2.对于B库,用户可能会执行插入、删除及修改操作,这些操作可能会影响主键或自增列,因此又给导入数据带来了困难:可能会导致主键重复或自增列重复进而出错

本人曾经在本栏发过寻求该问题解决方法的帖子http://community.csdn.net/Expert/topic/4997/4997924.xml?temp=.9609033,各位高手也给予了解答和帮助,在这里非常感谢大家!!但解决上述问题仍存在困难,还请大家再帮帮忙,谢谢!!

受大家的启示我的思路:为每个表增加一时间字段,用于记录导出数据的时间以区分新旧数据。动态创建数据管道实现数据导入。
困难:1.数据管道对象中去没有合适的地方将导出时间写入刚才新增的时间字段中;2.对于用户在B库中新增或修改的记录会导致自增列以及主键的重复,为新旧数据的区分有带来了困难

...全文
242 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
仰天长啸qsx 2006-09-12
  • 打赏
  • 举报
回复
1.数据管道对象中去没有合适的地方将导出时间写入刚才新增的时间字段中

可以通过修改数据管道的sql完成。
zsforever 2006-09-12
  • 打赏
  • 举报
回复
写个存储过程
set identity_insert B.dbo.你的表名 on
insert into B.dbo.你的表名 select * from A.dbo.你的表名
where not exists(select 1 from A.dbo.你的表名 where [key]=B.dbo.你的表名.[key])
set identity_insert B.dbo.你的表名 off
分表处理,这样会避免 自增列 的问题

752

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧