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

SSIS 合併數據進階技巧(三):使用 Merge Join + Conditional Split 實現 Upsert 與 Delete 同步

     編輯:關於SqlServer

前言

延續前兩篇合併數據系列,本文介紹利用 Merge Join (完全外部聯結) 搭配 Conditional Split 實現 Excel 來源與資料庫目標的完整同步:新增、更新、刪除三合一。

資料流架構設計

  1. 兩個來源:Excel Source 與 OLE DB Source (資料庫表)
  2. 雙方依 ProductNumber 排序
  3. Merge Join:設定 Full Outer Join,輸出雙方鍵值欄位
  4. Conditional Split:根據鍵值是否為 NULL 判斷操作類型
  5. 三條輸出分別接向:Insert、Update、Delete 目的地

資料流總覽:雙來源排序 → Merge Join → Conditional Split

Conditional Split 條件設定

Conditional Split 編輯器

輸出名稱條件運算式業務含義後續處理
Insert 新增ISNULL(ProductNumber)資料庫無此產品編號 → Excel 新資料OLE DB Destination (Insert)
Delete 刪除ISNULL(NewProductNumber)Excel 無此產品編號 → 資料庫舊資料需刪除OLE DB Command (DELETE)
Update 更新ProductNumber == NewProductNumber && !ISNULL(ProductNumber)雙方皆存在 → 比對欄位決定是否更新OLE DB Command (UPDATE)

關鍵技術細節

條件順序至關重要

必須將兩個 ISNULL 判斷放在最前面。因為第三個條件使用 TRIM 函數,若欄位為 NULL 會拋出錯誤。SSIS 條件評估是短路的,先過濾 NULL 再比對內容。

條件順序設定

Merge Join 完全外部聯結特性

  • 左側 (Excel) 有、右側 (DB) 無 → 右側欄位為 NULL
  • 左側無、右側有 → 左側欄位為 NULL
  • 雙方皆有 → 正常聯結

優缺點分析

優點缺點
單一資料流完成增刪改,邏輯清晰需預先排序,大量資料排序耗資源
視覺化邏輯易維護OLE DB Command 逐列執行,批次效能較差
無需撰寫複雜 SQL難以處理大量資料的高效能同步

效能優化建議

  • 大量資料改用 暫存表 + 批次 MERGE 陳述式 (SQL 2008+)
  • 或使用第三方 SCD Component (緩慢變維度元件)
  • 若資料量中等,可在 OLE DB Command 使用參數化預存程序減少編譯開銷
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved