Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MS SQL批量更新\插入_Java_Sql Server 2008_Bulkinsert_Jtds_Bulkupdate - Fatal编程技术网

Java MS SQL批量更新\插入

Java MS SQL批量更新\插入,java,sql-server-2008,bulkinsert,jtds,bulkupdate,Java,Sql Server 2008,Bulkinsert,Jtds,Bulkupdate,不久前,我们遇到了向MS SQL数据库批量插入\更新的问题 这项任务非常简单——从数据库中检索数据,执行数据转换,更新父表并填写子表。数据量巨大,这就是为什么我们对最高效的方法感兴趣。在DB中做任何事情(存储过程、文件处理等)都不适用,因为我们需要从第三方应用程序获取信息 虽然在internet上可以找到很多关于如何禁用自动提交和执行批插入\更新的文章,但无论如何,它会逐个发送请求。 这适用于大多数免费jdbc驱动程序,包括最流行的一种驱动程序-net.sourceforge.jtds.jdbc

不久前,我们遇到了向MS SQL数据库批量插入\更新的问题

这项任务非常简单——从数据库中检索数据,执行数据转换,更新父表并填写子表。数据量巨大,这就是为什么我们对最高效的方法感兴趣。在DB中做任何事情(存储过程、文件处理等)都不适用,因为我们需要从第三方应用程序获取信息

虽然在internet上可以找到很多关于如何禁用自动提交和执行批插入\更新的文章,但无论如何,它会逐个发送请求。 这适用于大多数免费jdbc驱动程序,包括最流行的一种驱动程序-net.sourceforge.jtds.jdbc.Driver()。 DataDirect可能支持这种功能,但它不是免费的。飞-

请分享解决类似问题的经验

致以最良好的祝愿,

亚历克斯

我们用另一种方法解决了这个问题。由于我们需要批量执行2条数据修改(插入新的子记录并用一些字段更新现有的父记录),因此我们重写了查询,如下所示:

更新:

插入的想法相同:

它给了我们显著的性能改进,因为大部分时间都花在建立连接上


我希望这会有帮助。

如果您正在共享知识,那么您可以将问题的解决方案部分拆分,并将其添加为您自己的解决方案部分answer@Nimesh,谢谢你的评论。更新后
 UPDATE ParentTable SET DeviceInformation = dual.DeviceInformation FROM ParentTable ptb 
  JOIN ( values (1, 'info1'), (2, 'info2')) as dual (ParentTableID, DeviceInformation) 
  ON  ptb.ParentTableID = dual.ParentTableID
    INSERT INTO dbo.ChildTable 
      (ChildId, ChildNumber, Info) 
      values (1, 1, 'some text'), (2, 2, 'some text2')