專案實施中資料匯入常見四種策略,依資料來源、量級、轉換複雜度選擇。
策略一:SELECT INTO / INSERT INTO(同質 SQL Server)
-- 建立目標表結構 (不含索引)
SELECT * INTO TargetDB.dbo.M_Product
FROM SourceDB.dbo.Product WHERE 1=0;
-- 匯入資料
INSERT INTO TargetDB.dbo.M_Product (col1, col2, ...)
SELECT col1, col2, ... FROM SourceDB.dbo.Product;
- 優點:語法簡單、效能高、跨版本相容 (2000/2005/2008/2012/2016/2019)。
- 缺點:不複製索引/約束/觸發器;目標表必須為空 (SELECT INTO) 或配合 INSERT INTO 合併。
策略二:Excel/CSV 中介(人工清洗、異構來源)
- 來源匯出 CSV/Excel (Oracle 用 SQL Developer、MySQL 用 Workbench)。
- Excel 進行:排序去重、取代異常字元、欄位型別修正、刪除廢棄列。
- SSMS → 資料庫右鍵 → 工作 → 匯入資料 → 選擇 Excel/平面檔案來源 → 對應欄位 → 執行。
- 優點:直觀、易驗證、非技術人員可參與清洗。
- 缺點:Excel 104 萬列限制、大量資料開啟緩慢、需人工介入。
策略三:DTS (SQL 2000) / SSIS (SQL 2005+) 封裝
- 圖形化設計:資料流任務、轉換元件 (衍生欄位、查閱、條件分割)、錯誤輸出導向。
- 程式化介面:COM/Managed API,前端應用可呼叫封裝執行,預先驗證/轉換資料。
- 優點:效能最強 (平行處理)、支援複雜 ETL、可版本控管、生產環境標準。
- 缺點:學習曲線陡峭、封裝部署/環境設定較繁瑣。
策略四:異構資料庫 OPENROWSET / OPENDATASOURCE
-- OPENDATASOURCE:僅開啟連結,無法過濾
SELECT * INTO LocalDB.dbo.Target
FROM OPENDATASOURCE('SQLOLEDB','Data Source=RemoteSVR;User ID=u;Password=p').RemoteDB.dbo.Source;
-- OPENROWSET:支援 WHERE 過濾
SELECT * INTO LocalDB.dbo.Target
FROM OPENROWSET('SQLOLEDB','Data Source=RemoteSVR;User ID=u;Password=p',
'SELECT col1,col2 FROM RemoteDB.dbo.Source WHERE status=1');
- 優點:Ad-hoc 查詢、無需建立連結伺服器。
- 缺點:參數複雜、無內建驗證/轉換、大量資料效能遜於 SSIS、安全性風險 (明文密碼)。
選擇決策樹
- 來源 = SQL Server、結構相容、無需清洗 → 策略一。
- 需人工清洗、來源非 SQL Server、資料量 < 100 萬列 → 策略二。
- 定期排程、複雜轉換、企業級專案 → 策略三 (SSIS)。
- 一次性 Ad-hoc、跨伺服器小量同步 → 策略四。
最佳實務建議
- 匯入前先在測試環境 驗證行數、檢查約束、比對檢查和。
- 大量匯入時:暫停索引/約束 → 匯入 → 重建索引/啟用約束,大幅提升速度。
- 使用
BULK INSERT / bcp 原生模式 (-n) 達到最高吞吐量。
- 記錄匯入日誌 (筆數、耗時、錯誤樣本) 供稽核追蹤。
依專案情境選擇適當策略,並建立標準化匯入 SOP,確保資料品質與作業效率。