Java MS SQL批量更新\插入
不久前,我们遇到了向MS SQL数据库批量插入\更新的问题 这项任务非常简单——从数据库中检索数据,执行数据转换,更新父表并填写子表。数据量巨大,这就是为什么我们对最高效的方法感兴趣。在DB中做任何事情(存储过程、文件处理等)都不适用,因为我们需要从第三方应用程序获取信息 虽然在internet上可以找到很多关于如何禁用自动提交和执行批插入\更新的文章,但无论如何,它会逐个发送请求。 这适用于大多数免费jdbc驱动程序,包括最流行的一种驱动程序-net.sourceforge.jtds.jdbc.Driver()。 DataDirect可能支持这种功能,但它不是免费的。飞- 请分享解决类似问题的经验 致以最良好的祝愿,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
亚历克斯我们用另一种方法解决了这个问题。由于我们需要批量执行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')