MS SQL批量更新\ insert

时间:2015-07-18 05:05:06

标签: java sql-server-2008 bulkinsert jtds bulkupdate

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

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

虽然在互联网上你可以找到很多关于如何禁用autoCommit并执行批量插入\更新的文章,但无论如何它会逐个发送请求。     这适用于大多数免费的jdbc驱动程序,包括最常用的一个 - net.sourceforge.jtds.jdbc.Driver(http://sourceforge.net/p/jtds/discussion/129584/thread/8e89906c/)。      可能DataDirect支持这样的功能,但它不是免费的。飞 - List of JDBC drivers for SQL Server 2008 (comparison)

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

最诚挚的问候,
亚历

1 个答案:

答案 0 :(得分: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')

它给我们带来了显着的性能提升,因为大部分时间花在了连接建立上。

我希望它会有所帮助。