关于十万笔数据的快速更新(急!!!!!!) (300分)

  • 主题发起人 主题发起人 浦欣
  • 开始时间 开始时间

浦欣

Unregistered / Unconfirmed
GUEST, unregistred user!
现有十万笔数据的文本文件(记录有添加也有更新),现要求在一小时内完成所有更新过程
文本数据文件的格式:
文本文件有N个字段,第一个为ID,第二个为标志(A/U-A:添加;U:更新),后面是几个字段
SQL Server数据库除了第二个字段没有外,其它相同

需将文本文件更新到SQL Server中的同字段的表中(除了第二项的(添加、更新标志)),请
问各位应该怎么做
(我只是做了一下文本文件的处理,程序已经不动了,大家有什么好的办法)
(我试过用SQL Server的DTS做,添加记录非常快(用BULK INSERT命令),但我处理不了第二项的问题,而且不知道
怎么实现更新)
在下在这儿先谢过了!
 
难的就是第二项,先把 A/U 放在一个字段里,然后在SQL Server里用UPDATE SET ..做分解处理
 
to smallbs:
你的意思我不太明白,
是不是先把文本数据导入一个新数据库中再添加或更新?
 
是的,添加字段,更新记录
 
两个库都按关键字索引,不要用一条SQL语句更新,那样反而慢。
两个库同时向下移动,
首先在文本库中移动,需要更新时,SQL Server向下移动到相同关键字。
更新当前记录。
更新完文本再向下移动,。。。。。。。
 
楼上的说的有道理
可以先试试

好好想一想再回
 
拆成10个一万条的怎么样?一万条数据更新效率应该不会低。
 
你用程序处理还是用SQLSERVER自己的工具处理???
我用的考勤表有上百万条记录,添加和更新都很快呀?!我是用SQL的语句操作的。
 
》十万笔数据的文本文件(记录有添加也有更新),现要求在一小时内完成所有更新过程
这么低的要求,就是用循环随便写都能满足了
可以先用DTS导入到另一个表,然后用SQL语句根据条件更新或插入原有表中。
如:
insert into NT(ID, F1, F2) select ID, F1, F2 from TEMPT where F3 = 'A';
update NT set (F1, F2) = (select F1, F2 from TEMPT where ID = NT.ID and F3 = 'U')
应该是非常快的。
 
如果是Oracle的话就更简单了, 用SQLLDR直接搞定
或者照上面的办法先导入,然后用MERGE语句,一句SQL就搞定[:)]
 
to xianjun:
谢谢你的回答,我已经做出来了,就是用你这个方法,不过多了一步处理(因为文本数据
文件中有个字段要处理一下)。
但我还想问一个不相关的问题,为什么我开始使用程序读文本文件处理后再更新数据的方法
效率特别低,为什么用SQL语句效率提升非常大?
 
恭喜你! 原因是多方面的,主要是SQL内部批量处理效率机制的因素,也有网络传输的因素
 
1、你用程序读文件是一行行的生成SQL再Insert或Update吧?这样的话,相当于数据库要
执行10万条SQL语句,这样的效率当然高不了。
2、如果你使用了批量绑定的功能,即一次性把一批数据传给数据库,然后数据库再进行
相应的操作。 不知SQL Server有无相应的功能,Oracle是有这样的功能,可以十倍,
百倍的提高效率。
 
如果只是把文本数据导入到数据库中,用SQL SERVER 的导入功能就行了。
它能导入好多种数据格式。方法是你先在数据库中建立好DB,然后再建立好TABLE
在TABLE上点右键,就可以按向导作了。
 
谢谢大家!!!
 
后退
顶部