一次多次插入

use*_*540 1 mysql sql-server coldfusion coldfusion-10

我要求一次在表格中插入大约2500-3000行数据.我需要为MySQL和SQL Server执行此操作.所以我找到的可能的解决方案是

  1. cfquery在里面cfloop.
  2. cfloopinside cfquery生成sql语句就好INSERT INTO tbl VALUES((),(),()).但是这种语法的问题是它一次只能插入1000条记录.我需要更多.

任何人都可以建议我什么是处理这种情况的最佳方法?

小智 5

当您处理数千条记录时,小的增量延迟开始快速增加.逐个插入此行数将比发出BULK INSERT语句花费更多时间,原因有多种,例如网络流量增加,内部数据库操作等.

我将假设您在文件中接收数据.在这种情况下,这些是您需要采取的一般步骤:

  1. 验证数据.很重要.即使您从受信任环境中的受信任来源接收数据,文件也很容易在很多方面被破坏,截断或损坏.它们还可能包含差异,因为服务器版本(SQL Server 2000与2008)或供应商(您的源可能是Oracle数据库)之间的差异很小但有时很大.
  2. 发布BULK INSERT声明,假设您使用的是SQL Server 2005或更高版本.我认为命令在2005和更新版本之间的工作方式存在一些差异,因此在尝试之前请检查语法.
  3. 根据您的配置和您可能需要的任何其他内容,您可能希望更新表上的索引,甚至重新创建它们.同样,这取决于桌子的大小和您的需求.此过程的这一部分可能需要最长时间,甚至可能使表离线,但您的用户将非常感谢您这样做.

仔细规划整个插入过程是值得的,这样您就不会破坏正常的业务活动并继续提供最好的服务和可用性.

最后,您应该使用不同的方法运行测试.逐个与批量一致,以确保您获得最佳性能.但是,我相信您总会发现批次或批量插入是可行的方法.他们将该功能添加到Transact-SQL语言中的原因是性能.这将节省网络带宽,资源和时间.

  • 关于该验证注释,这是使用登台表的好处之一. (5认同)
  • Excel文件最有可能需要未经验证的验证.人们会改变列,没有数据验证控件,因为插入数据库的数据可能(应该)具有.不应将Excel电子表格直接插入数据库中的生产数据.强烈推荐使用清理的临时表. (2认同)