續前篇,介紹命令列工具 BCP 與圖形化 ETL 平台 SSIS(SQL Server 2005+ 取代 DTS)。
BCP (Bulk Copy Program) — 高效批量匯出/匯入
- 純命令列,極低額外負擔,適合大量資料(百萬列以上)移動。
- 支援原生格式、字元格式、格式檔自訂欄位對應。
常用參數
| 參數 | 說明 |
-S server\instance | 目標伺服器 |
-d database | 資料庫 |
-U / -P | 登入帳號/密碼(或 -T 信任連接) |
-c | 字元模式(預設分隔符 \t、行終止 \r\n) |
-n | 原生模式(保留資料型別,速度最快) |
-f format_file | 指定格式檔(非 XML) |
-e err_file | 錯誤列導向檔案 |
-b batch_size | 批次大小(預設全部) |
-h "TABLOCK" | 大量載入提示,提升效能 |
範例
-- 匯出至文字檔
bcp "SELECT * FROM dbo.Orders" queryout C:\data\orders.txt -c -t, -T -S localhost
-- 匯入(需目標表存在)
bcp dbo.Orders in C:\data\orders.txt -c -t, -T -S localhost -b 10000 -h "TABLOCK" -e C:\data\err.log
SSIS (SQL Server Integration Services) — 企業級 ETL
- Visual Studio 整合開發環境(SSDT),拖拉式設計資料流程。
- 支援來源/目的地:關聯式資料庫、平面檔、Excel、XML、Web Service、ODBC、OLE DB 等。
- 內建轉換元件:查閱、合併、條件分割、衍生欄位、資料清理、腳本元件(C#/VB.NET)。
- 部署模式:專案部署模型(SSISDB 目錄)、套件部署模型(檔案系統/資料庫)。
- 排程執行:SQL Server Agent 作業、命令列
dtexec、PowerShell。
核心物件
| 物件 | 用途 |
| Connection Manager | 管理連接字串與驗證 |
| Control Flow | 工作流程控制(循環、條件、執行 SQL、發送郵件) |
| Data Flow | 資料抽取-轉換-載入(ETL 核心) |
| Event Handler | 錯誤/警告/資訊事件處理 |
| Parameters / Variables | 動態化套件執行 |
三大方式選型建議
| 方式 | 優勢 | 劣勢 | 適用場景 |
| T-SQL (OPENROWSET) | 即時、無外部工具、可 JOIN | 效能受限、單執行緒、難處理複雜轉換 | 臨時跨庫查詢、小量資料同步 |
| BCP | 極快、低資源、支援格式檔 | 純命令列、無視覺化、錯誤處理弱 | 大量資料定時匯出/匯入、資料庫搬遷 |
| SSIS | 視覺化、豐富轉換、錯誤處理、可維護 | 學習曲線陡、部署相對複雜 | 企業級 ETL、複雜清洗轉換、異構整合 |