如何将整个Excel电子表格表导入SQL Server上的表

时间:2017-11-06 10:15:24

标签: sql-server excel vba

我的公司目前有一个用VBA MS Access编写的脚本,该脚本从一系列excel电子表格中提取数据并更新SQL服务器上的表格。按照目前的情况,VBA脚本单独导入行,使用For-loop循环遍历行并在SQL服务器上构建/执行一系列INSERT命令。这非常慢,而且有问题,因为我们需要定期更新表格。

我的问题是,如何在访问中使用VBA将整个Excel电子表格批量导入SQL服务器上的表格?

SQL中是否有自动执行此操作的命令?如果是这样,它会比逐行更新更快吗?我已经在网上查看了各种文章,但到目前为止已经找到了可行的解决方案。

任何建议都将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:1)

这不是一个完整的答案,但我认为你应该考虑两个调查线:

选项1 - SSIS

  1. 右键单击SQL server(SSMS内部)中的DB
  2. 选择:任务:导入数据
  3. 按照此向导操作,但请务必在此过程结束时选择保存SSIS包
  4. 将它保存到你的rfile系统(有很多方法可以做到这一切,但这是一种方式)
  5. 使用DTEXEC从命令行运行包:

    DTEXEC /FILE ImportPackacge.dtsx

  6. 如果您按照此选项可以比较在向导中手动导入时运行的速度,这将使您大致了解它的运行速度,并且通常比单独插入快得多。

    请注意,您可以在SSIS包中创建整个加载过程,该过程也可以转换和验证数据。

    导入的分步示例 - 不保存:https://docs.microsoft.com/en-us/sql/integration-services/import-export-data/get-started-with-this-simple-example-of-the-import-and-export-wizard

    保存套餐:https://docs.microsoft.com/en-us/sql/integration-services/import-export-data/save-and-run-package-sql-server-import-and-export-wizard

    运行包:https://docs.microsoft.com/en-us/sql/integration-services/packages/run-integration-services-ssis-packages

    DTEXEC - 用于运行包的命令行工具:https://docs.microsoft.com/en-us/sql/integration-services/packages/dtexec-utility

    选项2 - BULK INSERT

    查看批量插入命令以及如何在VBA代码中应用

    https://docs.microsoft.com/en-us/sql/relational-databases/import-export/bulk-import-and-export-of-data-sql-server

    请注意,该文章讨论了可能值得研究的其他批量导入技术。

    每个选项都有很多细节......但根据您的技能水平/知识,这可能是您获得解决方案所需的所有信息。

    还要注意有很多方法可以做到这一点;访问和excel和SQL服务器每个都有办法在这里做一些或所有繁重的工作。我会先找到你最熟悉的那些并检查它们的速度,看看它是否足够好。

    我实际上可能首先尝试这个解决方案(来自FunThomas发布的评论),将excel文件作为表打开,直接复制为非常简单的任何知道sql的人都可以理解:

    https://stackoverflow.com/a/473019/359135