csh*_*son 9 import excel vba large-data sql-server-2008
有没有人知道在没有使用外部实用程序(即bcp)的情况下从Excel表格(VBA阵列)获取数据的最快方法到SQL 2008上的表格?请记住,我的数据集通常是6500-15000行,大约150-250列; 我最终在自动VBA批处理脚本中传输了大约20-150个.
我已经尝试了几种从Excel表(VBA)到SQL 2008获取大量数据的方法.我列出了以下内容:
方法1.将表传递到VBA阵列并发送到存储过程(ADO) - 发送到SQL是缓慢的
方法2.创建断开连接的RecordSet加载它,然后同步. - 发送到非常慢的SQL
方法3.将表放入VBA数组,循环遍历数组并连接(使用分隔符),然后发送到存储过程. - 发送到SQL SLOW,但比方法1或2更快.
方法4.将表放入VBA数组,循环遍历数组并连接(使用分隔符),然后将每行放置ADO recordset .addnew命令. - 发送到SQL非常快(比方法1-3快约20倍),但现在我需要使用单独的过程拆分数据,这将增加大量的等待时间.
方法5.将表放入VBA数组,序列化为XML,作为VARCHAR发送到存储过程并在存储过程中指定XML. - 发送到SQL INCREDIBLY SLOW(比方法1或2慢大约100倍)
我错过了什么?
没有单一最快的方法,因为它取决于许多因素。确保 SQL 中的索引已配置和优化。大量索引会降低插入/更新性能,因为每次插入都需要更新索引。确保只与数据库建立一个连接,并且在操作过程中不要打开/关闭它。当服务器负载最小时运行更新。您还没有尝试过的唯一其他方法是使用 ADO Command 对象,并发出直接 INSERT 语句。当使用记录集对象的“AddNew”方法时,请确保在插入结束时仅发出一个“UpdateBatch”命令。除此之外,VBA 的运行速度只能与 SQL 服务器接受输入的速度一样快。
编辑:看起来你已经尝试了一切。SQL Server 中还有所谓的“批量日志”恢复模式,可减少向事务日志写入大量内容的开销。可能是值得研究的东西。这可能会很麻烦,因为它需要稍微摆弄数据库恢复模型,但它可能对您有用。
| 归档时间: |
|
| 查看次数: |
17209 次 |
| 最近记录: |