SQL Server 資料導入導出三大主流路徑:Transact-SQL、BCP 命令列、DTS/SSIS。各有優勢,選型關鍵在於資料源異構度、轉換複雜度、自動化需求與開發模式。
1. Transact-SQL(含 OPENDATASOURCE / OPENROWSET)
- 優勢:同質 SQL Server 間極快;語法熟悉,可嵌入 SP/批次;
OPENDATASOURCE/OPENROWSET 支援異構源(Access、Excel、Oracle 等)。
- 差異:
OPENDATASOURCE 僅引用資料庫/伺服器,後接物件名;OPENROWSET 直接返回資料列集,可在函數內過濾(SELECT * FROM OPENROWSET(..., 'SELECT * FROM table1')),彈性更高。
- 劣勢:異構源效能較慢;複雜轉換邏輯難表達;無圖形化除錯。
2. BCP (Bulk Copy Program)
- 優勢:基於 DB-Library C 介面,原生平行載入,大量資料極快;命令列腳本化、排程極簡單。
- 用法:
bcp db.dbo.table out file -c -q -Sserver -Usa -Ppwd;IN/OUT 切換方向;可用 xp_cmdshell 在 SQL 內呼叫。
- 劣勢:無標題列;格式控制弱;不適合程式碼內嵌調用(需
xp_cmdshell 提權);無資料驗證/轉換能力。
3. DTS / SSIS (Data Transformation Services / Integration Services)
- 核心優勢:整合 UDA (Universal Data Access) + ActiveX,圖形化設計、腳本元件 深度資料清洗/轉換、套件儲存 部署、COM 程式介面二次開發。
- 腳本範例:VBScript 逐列轉換「婚姻狀態」0/1 → 「未婚/已婚」。
- 劣勢:COM 介面複雜,程式碼調用開發成本高;學習曲線陡峭。
效能排序
同質 SQL Server:T-SQL ≈ BCP > SSIS(小量)
異構源/複雜轉換:SSIS > BCP > T-SQL (OPENROWSET)
選型決策樹
- SQL Server 間簡單遷移、無複雜轉換 → T-SQL
- 需資料驗證、清洗、型別轉換、多源合併 → SSIS
- 大量批次、排程自動化、客戶端無管理工具 → BCP 批次檔
- 程式內嵌、資料量中等、無複雜邏輯 → OPENDATASOURCE/OPENROWSET