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

SSIS 批量匯入 Excel 檔案:Foreach Loop Container 完整實作指南

     編輯:關於SqlServer

需求背景

上一篇實現單一 Excel 匯入,實務上常需處理目錄下所有同結構 Excel 檔案。SSIS Foreach Loop Container 正是為此設計。

Foreach Loop Container 列舉器類型

支援五種列舉類型:

  • ADO 記錄集列舉
  • 檔案與目錄列舉 (本文重點)
  • 變數列舉
  • SMO 列舉
  • 項目列舉

Foreach 迴圈編輯器:集合頁面

實作步驟完整流程

1. 準備測試資料

  • 將上一篇產生的 Excel 重命名為 Product1.xls
  • 新建 Product2.xls,複製 ProductID < 800 的資料
  • 確保兩檔 Sheet 名稱相同

2. 建立封裝與變數

  • 新增封裝 ForeachInput.dtsx
  • 新增字串變數 CurrentExcelPath 儲存每次列舉的檔案完整路徑

3. Foreach 迴圈設定 - 集合頁面

  • 列舉器:**Foreach File Enumerator**
  • 資料夾:F:\ (或實際存放目錄)
  • 檔案:***.xls** (支援萬用字元)
  • 擷取檔案名:**完整路徑**

4. 變數對應設定

變數對應:Index 0 對應 CurrentExcelPath

  • 索引 0 → User::CurrentExcelPath

5. 迴圈內部資料流設計

  1. Excel Source:連線管理器運算式 ExcelFilePath = @[User::CurrentExcelPath]
  2. 資料轉換 (如需)
  3. OLE DB Destination:寫入資料庫

6. 連線管理器動態設定關鍵

Excel 連線管理器 → 屬性視窗 → Expressions → 新增:

Property: ExcelFilePath
Expression: @[User::CurrentExcelPath]

此設定使每次迴圈自動切換至當前列舉檔案。

進階應用技巧

需求實作方式
遞迴處理子目錄集合頁面勾選「遞迴子資料夾」
檔案名稱模式比對使用 Product_*.xls 或 ??_data.xlsx
處理前先驗證檔案結構Script Task 檢查 Sheet 名稱、欄位數
處理後移動/刪除/歸檔File System Task 移動至備份資料夾
記錄每個檔案處理狀態資料流加入來源檔案欄位 + 稽核資料表

常見坑點提醒

  • 64 位元執行時:需安裝 64 位元 ACE OLEDB Provider,或設定封裝 Run64BitRuntime=False
  • Excel 檔案被鎖定:確保迴圈外未開啟檔案,連線管理器 RetainSameConnection=False
  • 資料類型推斷錯誤:連線字串加入 IMEX=1 強制混合類型視為文字
  • 大量檔案效能:考慮平行處理 (MaxConcurrentExecutables) 或分批次
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved