-1

前段时间我们遇到了批量插入\更新到 MS SQL 数据库的问题。

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

虽然在互联网上你可以找到很多关于如何禁用自动提交和执行批量插入\更新的文章,但无论如何它都会一个接一个地发送请求。这适用于大多数免费的 jdbc 驱动程序,包括最流行的一个 - net.sourceforge.jtds.jdbc.Driver ( http://sourceforge.net/p/jtds/discussion/129584/thread/8e89906c/ )。可能 DataDirect 支持这样的功能,但它不是免费的。FIY - SQL Server 2008 的 JDBC 驱动程序列表(比较)

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

最好的问候,
亚历克斯

4

1 回答 1

0

我们以其他方式解决了这个问题。由于我们需要批量执行 2 条数据修改(插入新的子记录并使用某些字段更新现有父记录),我们重写查询以执行此操作:

更新:

 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的想法相同:

    INSERT INTO dbo.ChildTable 
      (ChildId, ChildNumber, Info) 
      values (1, 1, 'some text'), (2, 2, 'some text2')

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

我希望它会有所帮助。

于 2015-07-21T22:49:25.383 回答