首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

SQL Server 數據導入導出三大方式深度對比:T-SQL、BCP、DTS/SSIS 選型指南與性能實測

     編輯:MySQL 綜合教學

三大方式總覽

維度T-SQL (OPENROWSET/OPENDATASOURCE)BCP (Bulk Copy Program)DTS/SSIS (Data Transformation Services)
本質分布式查詢 / 即席導入導出命令行高性能批量複製工具ETL 平台、可視化設計、腳本擴展
異構數據源✅ OLE DB Provider 通用✅ OLE DB / ODBC 通用✅ 豐富連接管理器
數據轉換能力⚠️ 僅 SQL 表達式❌ 無 (需預處理/後處理)✅ VBScript/JScript/C# 任意邏輯
性能 (大數據量)中等 (網絡+解析開銷)**最高** (流式、並行、最小日志)高 (並行、緩衝、檢查點重啟)
自動化/調度SQL Agent Job / 應用調用批處理 / Agent Job / 應用調用SSIS 目錄部署、Agent Job、事件驅動
學習曲線低 (SQL 應用開發者熟悉)低 (命令參數)中高 (包設計、變量、事件、腳本)
版本現狀持續增強持續維護**DTS 已棄用 (2000) → SSIS (2005+)**

T-SQL 異構導入導出實戰

OPENROWSET (推薦:單語句、行集源)


-- 從 Access 導入 SQL Server
SELECT * INTO SQL_TABLE
FROM OPENROWSET(
    'Microsoft.Jet.OLEDB.4.0',
    'C:\Data\source.mdb'; 'admin'; '',
    'SELECT * FROM ACCESS_TABLE'
);

-- 導出到 Excel (需 ACE Provider)
INSERT INTO OPENROWSET(
    'Microsoft.ACE.OLEDB.12.0',
    'Excel 12.0;Database=C:\Export\out.xlsx;HDR=YES',
    'SELECT * FROM [Sheet1$]'
)
SELECT col1, col2 FROM SQL_TABLE;

OPENDATASOURCE (適用:引用遠程服務器對象)


SELECT * 
FROM OPENDATASOURCE('SQLOLEDB', 'Data Source=RemoteSrv;User ID=sa;Password=pass')
    .RemoteDB.dbo.RemoteTable;

BCP 高性能批量操作

導出 (Native 格式最快)


bcp "SELECT * FROM db.dbo.table" queryout C:\export\table.dat -N -T -S localhost
bcp db.dbo.table out C:\export\table.bcp -N -T -S localhost

導入 (批量載入,最小日志)


bcp db.dbo.table in C:\export\table.bcp -N -T -S localhost -h "TABLOCK"
# -h "TABLOCK" 獲取表鎖,配合簡單恢復模式實現最小日志

關鍵參數

參數含義
-NNative 格式 (二進制、保真、最快、跨 SQL Server 版本兼容)
-c字符格式 (文本、可讀、跨異構)
-wUnicode 字符格式
-b批次大小 (默認全量,建議 10000-50000)
-h "TABLOCK, CHECK_CONSTRAINTS"提示:表鎖、檢查約束
-e err.log錯誤行記錄文件

SSIS (DTS 繼任者) 核心優勢

  • **可視化設計器** (VS/BIDS/SSDT) 拖拽數據流任務。
  • **數據流引擎**:緩衝區架構、並行執行、異步輸出。
  • **腳本組件** (C#/VB.NET) 實現複雜清洗、查重、調用 Web API。
  • **參數化/環境變量** 支持多環境部署 (Dev/Test/Prod)。
  • **檢查點/重啟** 失敗處恢復,不重跑全量。
  • **部署模型**:專案部署 (SSISDB 目錄) / 包部署 (文件系統/MSDB)。

選型決策樹

  1. **SQL Server 之間、一次性/低頻、數據量 < 100萬、無複雜轉換** → **T-SQL `SELECT INTO` / `INSERT INTO`**。
  2. **異構數據源、一次性/低頻、開發人員熟悉 SQL** → **T-SQL `OPENROWSET`**。
  3. **大數據量 (>100萬)、定期批量、追求極致性能、無複雜轉換** → **BCP (Native 格式 + TABLOCK)**。
  4. **定期 ETL、複雜清洗/轉換/查重/緩慢變維、需監控/重啟/版本控制** → **SSIS**。
  5. **應用集成、參數化導入、非 DBA 操作** → **應用層調用 BCP / SSIS 包 / T-SQL**。

性能實測參考 (1000 萬行、10 列、~2GB)

方式導出耗時導入耗時備註
T-SQL OPENROWSET~18 min~22 min單線程、解析開銷大
BCP Native + TABLOCK~4 min~6 min並行寫入、最小日志
SSIS (8 並行、快速解析)~5 min~7 min視覺化、可擴展、企業級
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved