首页 新闻 会员 周边 捐助

sql server怎样把有六万多条数据的表,同步数据到另外一张表?

0
悬赏园豆:10 [待解决问题]

A表有六万多条数据,A表的表结构如下:

 

 

 

 

A表主键是MaterielGUID, 字段MaterielCode 可重复;

MaterielGUID nvarchar(50),  --主键id
MaterielCode nvarchar(50),
MaterielName nvarchar(50),
ParentNode nvarchar(50),
IfLeafNode bit,
Material_Category int,
Raw_Material_Category int,
If_Read  bit,
WriteDT datetime

 

B表结构如下:

MaterialCode  --主键
MaterialName
ParentNode
IfLeafNode
MaterialCategory
RawMaterialCategory

先要把A表的数据同步到B表, 

B表的主键是MaterialCode  ,A表除了多一个字段MaterielGUID主键,其余字段和B表对应。

步骤:

读取 A表数据,条件是If_Read=0,根据WriteDT排序。

遍历读取到的结果集,比较B表MaterialCode, 判断B表中存不存在这条数据。

不存在则插入数据到B表,同时更新A表If_Read=1;

存在则更新B表为这个MaterialCode的数据,同时更新A表If_Read=1;

我写的存储过程如下:

复制代码
View Code
复制代码

 

六万条数据,同步要2分40多秒!!!

 

求,有没有效率更高的写法,同步A表数据到B表

秋刀鱼No1的主页 秋刀鱼No1 | 初学一级 | 园豆:31
提问于:2016-07-31 17:09
< >
分享
所有回答(3)
0

你的sql业务逻辑太多了.自然慢.把业务放代码.sql只做表的增删改.自然就块了.

吴瑞祥 | 园豆:29449 (高人七级) | 2016-07-31 17:40

只是同步A表If_Read为0的数据,同步完后,更新A表If_Read为1

支持(0) 反对(0) 秋刀鱼No1 | 园豆:31 (初学一级) | 2016-08-03 10:02
0

优化数据结构

小熊vs | 园豆:20 (初学一级) | 2016-08-01 12:03

接口表A是设计做的,别人系统自赋值insert 数据到A表(MaterielGUID做主键)。我们数据库的表居然和接口表还不一致(MaterielCode做主键)

支持(0) 反对(0) 秋刀鱼No1 | 园豆:31 (初学一级) | 2016-08-03 10:01
0

如果你能保证操作的时候A表没有数据操作的话,可以批量执行,应该几秒就能搞定

只需要执行两个语句

1.将A表数据插入到表

insert into B select B的表结构 from A where If_Read=0 order by WriteDT --其实这个排序我认为一点用的没有,还浪费效率

2.将A表的If_Read设为1

update A set If_Read=1

刘宏玺 | 园豆:14020 (专家六级) | 2016-08-01 13:20

A表是接口表,别的系统往A表里插入数据,我们系统的表是B表。关键点是我们的表拿MaterielCode做主键。A表有自己的guid列做主键(MaterielGUID). A表修改一条数据不是用的update语句,而是直接插入一条新数据到A表。例如A表先插入一条数据:insert A values(newid(),'aaa','蛋白粉1')。 结果A表想修改这条记录,把蛋白粉1修改为蛋白粉2,是插入一条数据:insert A
values(newid(),'aaa','蛋白粉2')。 而我同步的时候先同步了一条 aaa','蛋白粉1' 判断B表主键有没有'aaa'的数据,有则更新,没有则插入。可能同一次同步数据就会出现 newid(),'aaa','蛋白粉1'和newid(),'aaa','蛋白粉2'这样的2条数据

支持(0) 反对(0) 秋刀鱼No1 | 园豆:31 (初学一级) | 2016-08-03 09:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册