【问题标题】:How to speed up tables transfer between Access and SQL Server using VBA?如何使用 VBA 加速 Access 和 SQL Server 之间的表传输?
【发布时间】:2018-12-26 02:33:52
【问题描述】:

我正在尝试以编程方式将表从访问权限移至 SQL Server。 我在系统权限上有一些限制,即:我不能使用 OPENDATASOURCE 或 OPENROWSET。

我想要实现的是将一些表从 Access 传输到 SQL Server,然后通过 vba (excel)/python 和 T-SQL 处理这些表。

问题在于移动桌子所需的时间。 我目前的流程是:

  1. 我使用 vba 宏,从 excel 导入数据并在访问中进行相同的转换,然后导入 SQL Server
  2. 销毁服务器中的表:“DROP TABLE”
  3. 使用 DoCmd.TransferDatabase 重新导入表

我注意到该操作似乎是基于一批行而不是直接完成的。每 1000 行需要 1 分半钟。在 Access 上执行相同的操作需要几秒钟。

我理解是SQL Server的一种特定方式,使用10行批量导入,可能是为了对数据有更多的访问权限:Micorsoft details

但在上述过程中,我只想尽快将表从访问 SQL 中复制出来,然后我会避免跨平台链接,我将只在 SQL Server 上执行操作。

哪种方法可以更快地实现这一目标?

【问题讨论】:

  • 10-rows-at-a-time 用于将数据从 Sql Server 提取到 Access 中,而不是用于插入。
  • (虽然问题是关于 Oracle,但答案是关于 SQL Server。)——另见stackoverflow.com/questions/32759978/…
  • 为什么要使用 Access 表?无论您对 access 表做什么,都可以通过链接到 access 的第二个 SQL 表来完成,假设仅使用一个表无法完成您需要的操作。
  • 嗨,因为像 OPENDATASOURCE 或 OPENROWSET 这样的函数被阻止了,所以我无法将 excel 文件导入 SQL Sever。那么对于相同的简单操作,访问速度异常快。

标签: sql-server excel vba tsql ms-access


【解决方案1】:

为什么像 OPENDATASOURCE 或 OPENROWSET 这样的函数会被阻止?你在银行工作吗?

我不能确定哪种解决方案是绝对最快的,但您可能需要考虑将所有 Access 表导出为单独的 CSV 文件(或 Excel 文件),然后运行一个小脚本将这些文件中的每一个加载到SQL 服务器。

这是一些将单独的表保存为单独文件的 VBA 代码。

Dim obj As AccessObject, dbs As Object
Set dbs = Application.CurrentData
For Each obj In dbs.AllTables
If Left(obj.Name, 4) <> "MSys" Then
DoCmd.TransferText acExportDelim, , obj.Name, obj.Name & ".csv", True
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, obj.Name, obj.Name & ".xls", True
End If
Next obj

现在,您可以使用批量插入非常轻松快速地将 CSV 文件加载到 SQL Server 中。

Create TestTable

USE TestData
GO
CREATE TABLE CSVTest
(ID INT,
FirstName VARCHAR(40),
LastName VARCHAR(40),
BirthDate SMALLDATETIME)
GO

BULK
INSERT CSVTest
FROM 'c:\csvtest.txt'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
GO
--Check the content of the table.
SELECT *
FROM CSVTest
GO
--Drop the table to clean up database.
DROP TABLE CSVTest
GO

https://blog.sqlauthority.com/2008/02/06/sql-server-import-csv-file-into-sql-server-using-bulk-insert-load-comma-delimited-file-into-sql-server/

此外,您可能需要考虑这些选项之一。

https://www.online-tech-tips.com/ms-office-tips/ms-access-to-sql-database/

https://support.office.com/en-us/article/move-access-data-to-a-sql-server-database-by-using-the-upsizing-wizard-5d74c0df-c8cd-4867-8d07-e6e759d72924

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-21
    • 2021-04-15
    • 1970-01-01
    • 2013-10-16
    • 1970-01-01
    • 2019-09-02
    • 2013-01-27
    • 2013-08-06
    相关资源
    最近更新 更多