excel - 将 Excel 表数据传输到 SQL 2008R2 的最快方法

标签 excel vba sql-server-2008 import large-data

有人知道在不使用外部实用程序(即 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 很慢,但比方法 1 或 2 更快。

方法 4. 将表放入 VBA 数组中,循环遍历数组并连接(使用分隔符),然后使用 ADO recordset .addnew 命令放置每一行。 --发送到 SQL 的速度非常快(大约比方法 1-3 快 20 倍),但现在我需要使用单独的过程来拆分该数据,这将增加大量的等待时间。

方法 5. 将表放入 VBA 数组中,序列化为 XML,以 VARCHAR 形式发送到存储过程,并在存储过程中指定 XML。 --发送到 SQL 极其缓慢(比方法 1 或 2 慢大约 100 倍)

我缺少什么吗?

最佳答案

没有单一最快的方法,因为它取决于许多因素。确保 SQL 中的索引已配置和优化。大量索引会降低插入/更新性能,因为每次插入都需要更新索引。确保只与数据库建立一个连接,并且在操作过程中不要打开/关闭它。当服务器负载最小时运行更新。您还没有尝试过的唯一其他方法是使用 ADO Command 对象,并发出直接 INSERT 语句。当使用记录集对象的“AddNew”方法时,请确保在插入结束时仅发出一个“UpdateBatch”命令。除此之外,VBA 的运行速度只能与 SQL 服务器接受输入的速度一样快。

编辑: 看来你已经尝试了一切。 SQL Server 中还有所谓的“批量日志”恢复模式,可减少向事务日志写入大量内容的开销。可能是值得研究的东西。这可能会很麻烦,因为它需要稍微摆弄数据库恢复模型,但它可能对您有用。

关于excel - 将 Excel 表数据传输到 SQL 2008R2 的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10708077/

相关文章:

file-io - VBA 线路输入与输入

vba - Excel源数据方向错误

sql - 如何授予数据库所有者(DBO)EXTERNAL ACCESS ASSEMBLY权限?

sql - 在行不存在或条件匹配的地方加入...?

c# - 学习 c# Excel 互操作的资源

excel - 查找限制范围内的值的总和数

excel - VBA 过程仅返回特定日期之前的结果

vba - 处理一个单元格中的多个值以导出为 CSV

sql-server-2008 - 00000000-0000-0000-0000-000000000000 的 GUID 导致合并索引违规

excel - 如何在Excel单元格中转换多个值