前言
本文針對 SSIS (SQL Server 2005 整合服務) 設計階段常見的「為什麼」問題,提供架構層面的解答與替代方案,而非單純的「如何操作」步驟。
問題 1:為何匯入/匯出精靈在傳輸數千張表時失敗?
原因:精靈架構會為每張表在單一資料流任務建立來源/目的地元件。SSIS 資料流引擎對單一資料流的元件數量有擴展性限制(記憶體、執行緒、緩衝區管理)。
建議方案:
- 拆分為多個套件,每個套件處理百張表以內。
- 使用 BI 開發工作室 設計參數化套件,透過
Foreach Loop Container 迴圈動態載入表清單。
- 或改用 BCP / BULK INSERT / 復寫 / AlwaysOn 可讀次要複本 進行大量資料遷移。
問題 2:為何匯入/匯出精靈無法複製資料庫物件 (Table Schema、Index、FK、SP 等)?
定位差異:精靈定位為「資料移動工具」(支援文字檔、Excel、OLE DB 來源),而非「資料庫部署/遷移工具」。複製結構屬管理作業。
正確工具:
- 複製資料庫精靈 (SSMS 管理節點) — 專門複製結構與資料,支援脫機/線上模式。
- 資料庫發布精靈 / Generate Scripts — 產生結構腳本。
- SSDT / DACPAC — 專案式部署,版本控管、差異比對。
問題 3:為何不能在 SSMS 中設計套件?
職責分離:
- SSMS (SQL Server Management Studio):管理已部署套件的儲存、執行、監控、列舉遠端伺服器套件、與 SSIS 服務整合。
- BI Development Studio (BIDS / SSDT):專屬設計環境 — 方案/專案組織、偵錯、原始碼版控 (TFS/Git)、多使用者協作。
SQL Server 2005 強制「設計與管理分離」,確保專業分工與治理。
問題 4:資料來源、資料來源檢視 與連線管理員 的關係?
| 物件 | 層級 | 用途 | 執行階段可用性 |
| 資料來源 | 專案 | 定義 OLE DB/ADO.NET 連線字串、友好名稱、描述 | 僅設計階段 |
| 資料來源檢視 (DSV) | 專案 | 關聯結構描述的子集:命名查詢、計算欄、虛擬關聯、友好名稱 | 僅設計階段 |
| 連線管理員 | 套件 | 執行階段實際連線:資料庫、檔案、HTTP、FTP 等;含完整中繼資料 | 設計 + 執行階段 |
關鍵機制:設計時連線管理員可參考資料來源/DSV 繼承屬性;部署時連線管理員內嵌所有中繼資料,獨立運行。多個套件可共享專案層級資料來源/DSV,確保結構定義一致性 (如星狀結構)。
問題 5:為何沒有 Excel / Access 資料來源?
資料來源僅支援 OLE DB/ADO.NET Managed Provider。Excel/Access 透過 連線管理員 直接連接 (選擇 Excel/Access 提供者),不需要專案層級資料來源抽象層。這也是連線管理員比資料來源更通用的原因。
最佳實踐總結
- 大量資料移動:避開精靈,使用參數化套件 + 迴圈容器,或 BCP/復寫/資料庫鏡像。
- 結構遷移:用複製資料庫精靈或 SSDT/DACPAC 專案部署。
- 環境隔離:開發/測試/生產使用專案參數/環境變數切換連線管理員屬性,勿硬編碼。
- 共用邏輯:星狀結構等共用結構定義於 DSV,多套件參考。
- 版控與 CI/CD:.dtproj 納入 Git,Azure DevOps/GitHub Actions 自動建置部署 .ispac。