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

SSIS 合併數據進階技巧(二):六種 Upsert 實作方案深度比較

     編輯:關於SqlServer

前言

針對「存在即更新、不存在即插入」(Upsert) 這一經典需求,本文系統介紹六種 SSIS 實作方案,並分析各自優缺點與適用場景。

六大方案總覽

方案核心元件/技術適用版本特點
1. LookupLookup 元件 + 錯誤輸出2005+最常用、記憶體快取、支援快取模式
2. Execute SQL Task + 預存程序控制流逐列呼叫 SP2000+邏輯封裝在 DB、易維護、但逐列執行慢
3. Script Component資料流腳本元件2005+彈性最高、可複雜邏輯、需程式碼維護
4. MERGE 陳述式SQL 2008 新語法2008+單一陳述式完成、效能最佳、需目標表有索引
5. Merge Join + Conditional Split資料流聯結分流2005+視覺化、無需程式碼、需排序
6. SCD Component第三方緩慢變維度元件2005+專為 SCD 設計、支援 Type 1/2、配置而非程式

方案一:Lookup 元件詳解 (最推薦入門)

資料流配置

  1. Excel Source → Lookup (OLE DB 連線)
  2. Lookup 設定:依 ProductNumber 查詢資料庫 ProductID
  3. 找到 → 輸出含 ProductID → 走更新路徑
  4. 找不到 → 錯誤輸出重新導向 → 走插入路徑

Lookup 編輯器:查詢設定

錯誤輸出設定關鍵

錯誤輸出設定:找不到導向錯誤輸出

  • 「錯誤」與「截斷」動作均設為 重新導向列
  • 正常輸出接 OLE DB Command 執行 UPDATE
  • 錯誤輸出接 OLE DB Destination 執行 INSERT

正常輸出接 OLE DB Command 更新

方案比較與選型建議

場景推薦方案理由
中小資料量、追求開發速度Lookup設定簡單、效能尚可、視覺化
大量資料 (百萬列以上)MERGE 陳述式 / 暫存表批次集合運算、最少往返、平行處理
複雜業務邏輯 (多表關聯、歷史追蹤)Script Component / SCD程式碼彈性 / 專用元件
邏輯需集中在資料庫端預存程序 + Execute SQLDBA 可獨立維護、版本控管

Lookup 效能優化技巧

  • 快取模式:Full Cache (資料小)、Partial Cache (資料大)、No Cache (即時查詢)
  • 只選取必要欄位:減少快取記憶體佔用
  • 啟用 64 位元執行:突破 2GB 記憶體限制
  • 預先篩選:在資料流早期移除明顯無效列
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved