SQL Server Integration Services (SSIS) 中 Foreach 循環容器** 配合 Foreach 文件枚舉器 是實現「目錄下所有同結構文件批量入庫」的標準模式。本文以 SQL Server 2008 R2 為例,通過圖文並茂的 10 步驟,完整演示從包創建到動態連接字符串綁定的全過程。
C:\Data\TxtFiles\ 下有多個 .txt 文件,結構完全一致(列數、分隔符、編碼)。dbo.ImportedData,列對應文件列。拖入 Foreach 循環容器 → 容器內拖入 數據流任務。

右鍵容器 → 編輯 → 集合 頁籤:
C:\Data\TxtFiles\*.txt
變量映射** 頁籤 → 新增變量 User::CurrentFilePath (類型 String) → 索引 0。
每次循環迭代,該變量自動賦值為當前枚舉到的文件完整路徑。

雙擊進入數據流標籤 → 拖入 平面文件源 + OLE DB 目標 → 連接綠箭頭。

雙擊平面文件源 → 新建連接管理器 → 瀏覽選擇目錄下**任意一個** .txt 文件作為模板 → 設置列分隔符、列名、數據類型。

列** 頁籤調整輸出列名、類型。完成後連接管理器名為 FlatFileSrc。
雙擊 OLE DB 目標 → 選擇/新建數據庫連接 → 選擇目標表 (可點「新建」自動建表) → 列映射自動匹配。

這是實現「每次循環讀取不同文件」的關鍵!
Expressions → 點擊省略號按鈕。ConnectionString (或 ConnectionStringExpression)。@[User::CurrentFilePath] → 確定。
原理:每次 Foreach 迭代更新變量 → 表達式重新求值 → 平面文件源連接字符串指向新文件 → 數據流讀取新文件數據 → 寫入目標表。
點擊啟動調試 (F5)。控制台輸出顯示 Foreach 循環執行 5 次 (假設 5 個文件),每次數據流傳輸 1 行,目標表最終有 5 行數據。

| 需求 | 實現方式 |
|---|---|
| 文件編碼不一致 | 在平面文件連接管理器中設置 CodePage (如 65001 UTF-8, 936 GBK) |
| 首行列名/跳過行 | 連接管理器「常規」頁籤設置 HeaderRowsToSkip |
| 錯誤行重定向 | 平面文件源錯誤輸出配置「重定向行」到錯誤表/文件 |
| 處理完成後歸檔/刪除源文件 | Foreach 容器內數據流後添加「文件系統任務」移動/刪除文件,使用同一變量路徑 |
| 動態目標表名 | OLE DB 目標使用「表名或視圖名稱變量」綁定另一變量 |
Foreach 文件枚舉器 + 變量映射 + 連接管理器表達式綁定,構成 SSIS 批量處理同結構文件的**鐵三角模式**。掌握「完全限定名稱」獲取路徑、「ConnectionString 表達式」動態切換源、錯誤重定向與後處理任務鏈,即可應對絕大多數文件入庫自動化場景。