首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

Access 大量資料寫入效能提升方案:文字檔中轉 + SQL 批次匯入

     編輯:關於SqlServer

痛點分析

Access 透過 DAO/ADO 逐筆 INSERT 寫入 30 萬筆資料,耗時數分鐘甚至更久,主要瓶頸在:

  • 每筆圍繞 Jet/ACE 引擎的交易開銷
  • 索引即時維護、鎖定升級
  • 網路/介面層往返延遲

核心方案:資料 → 文字檔 → MDB

利用 Access 內建文字檔匯入引擎,繞過逐筆寫入路徑,直達儲存層。

實作步驟

步驟 1:產生標準 CSV 文字檔

  • 每行一筆記錄,第一行為標題列
  • 欄位間用逗號分隔,符合 CommaText 規範(含引號、逗號、換行的欄位需雙引號包裹並跳脫)
  • 編碼建議 ANSI 或 UTF-8(視 Access 版本)

步驟 2:SQL 批次匯入

SELECT * INTO tableName1
FROM [Text;DATABASE=路徑].[檔名.txt]

關鍵語法細節

實測效能數據

  • 30 萬筆資料:約 10 秒 完成匯入
  • 對比逐筆 DAO 寫入:提升 100~500 倍

必要前置條件

  • 啟用 VBA 巨集安全性:檔案 → 選項 → 信任中心 → 巨集設定 → 啟用所有巨集
  • 或在程式碼中設定 Application.AutomationSecurity = msoAutomationSecurityLow
  • 確保文字檔格式正確(可先用 Access 手動「外部資料 → 文字檔」導入驗證)

適用範圍與限制

元素說明
[Text;DATABASE=路徑]外部資料來源描述,中括號必須保留
DATABASE=路徑文字檔所在**目錄**(非檔案完整路徑)
[檔名.txt]檔名含副檔名,方括號必須保留
SELECT * INTO 新表自動建立目標表結構並匯入

擴展:VBA 完整自動化範例

Sub ImportBigData()
    Dim txtPath As String, txtFile As String, tblName As String
    txtPath = "C:\Data\"
    txtFile = "bigdata.txt"
    tblName = "TargetTable"
    
    On Error Resume Next
    DoCmd.DeleteObject acTable, tblName
    On Error GoTo 0
    
    Dim sql As String
    sql = "SELECT * INTO [" & tblName & "] FROM [Text;DATABASE=" & txtPath & "].[" & txtFile & "]"
    CurrentDb.Execute sql, dbFailOnError
    MsgBox "匯入完成:" & CurrentDb.TableDefs(tblName).RecordCount & " 筆"
End Sub

文字檔中轉法是 Access 大量資料匯入的「殺手鐧」,善用內建引擎,事半功倍。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
適用不適用
大批量初始化/同步匯入頻繁小批次增量更新(改用 DAO/ADO)
結構固定、欄位型別穩定含 OLE 物件、附件、複雜計算欄位
離線/批次處理窗口即時性要求極高的線上交易