首页 新闻 会员 周边 捐助

关于SQL批量插入数据库

0
悬赏园豆:40 [已解决问题] 解决于 2010-05-13 17:10

首先插入一张主表,返回id

<xml>
<order>
<id>1111111</id>
<o>主订单</o>
</order>
<detail><!--订单详情-->
<list>
<id>1</id>
<orderid>1111111</orderid>
<name>张三</name>
<amout>100</amout>
</list>
<list>
<id>2</id>
<orderid>1111111</orderid>
<name>李四</name>
<amout>200></amout>
</list>
<list>
<id>3</id>
<orderid>1111111</orderid>
<name>王二</name>
<amout>300</amout>
</list>
<list>
<id>4</id>
<orderid>1111111</orderid>
<name>麻子</name>
<amout>300</amout>
</list>
</detail>
</xml>
主订单号拿到,然后插入订单详情,每条详情都需要判断是否已经在详情表中存在,如果存在,则不再插入了,将订单号修改成主订单号,如果不存在则插入新的,如果amout参数不匹配,也插入新的;
每次大概最多20条左右的详情,如果在程序中循环来进行插入的话,效率低下,不知道怎么解决才好,因为每次都涉及要将订单详情做了判断,再插入的问题
看看大家有没更好的办法,效率,性能,解决方案肯定是有,只是需要一种更优的,如果实在没有的话,那就只能采用最原始最笨的方法来做了,为了避免出错,只能用事务来处理吧
站在天空下的猪的主页 站在天空下的猪 | 初学一级 | 园豆:135
提问于:2010-05-13 15:26
< >
分享
最佳答案
0

我想,如果真的数据很多,很影响性能,可以采用以下方法,下面是方法的步骤。

  • 先对数据进行处理,将处理结果先不保存数据库,而是存为 .dat 文件。
  • 再用 SQL Server 的 BCP 命令,或者 ADO.NET 的 Bulk Copy(其实也是由于 SQL Server 有这个功能)保存数据。

注:.dat 是 SQL Server 的 BCP 需要的格式,具体可以参考 SQL Server Books Online。

收获园豆:30
周巍 | 小虾三级 |园豆:735 | 2010-05-13 16:09
现在我的想法,可能是不再涉及判断了,都再次插入了,反正总有数据不相同,只要能区分出来数据,其他的问题不大,只要不做判断,datatable或者SqlBulkCopy也是不错的选择,数据量始终不会大,最多不超过20条,按照对业务的估算,每次2-3条就算不错的了,而且发生的记录还特别小,分给你吧,想通解决方案,数据插入不再重要了
站在天空下的猪 | 园豆:135 (初学一级) | 2010-05-13 16:22
其他回答(1)
0

如果数据量很大,且每次插入前都要判断是否存在,那么可以用一个中间表来记录延时处理,而不是实时插入。然后用消息队列或job来完成。

收获园豆:10
邀月 | 园豆:25475 (高人七级) | 2010-05-13 16:28
大致解决了,不需要处理那个详情的问题
支持(0) 反对(0) 站在天空下的猪 | 园豆:135 (初学一级) | 2010-05-13 17:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册