針對「存在即更新、不存在即插入」(Upsert) 這一經典需求,本文系統介紹六種 SSIS 實作方案,並分析各自優缺點與適用場景。
| 方案 | 核心元件/技術 | 適用版本 | 特點 |
|---|---|---|---|
| 1. Lookup | Lookup 元件 + 錯誤輸出 | 2005+ | 最常用、記憶體快取、支援快取模式 |
| 2. Execute SQL Task + 預存程序 | 控制流逐列呼叫 SP | 2000+ | 邏輯封裝在 DB、易維護、但逐列執行慢 |
| 3. Script Component | 資料流腳本元件 | 2005+ | 彈性最高、可複雜邏輯、需程式碼維護 |
| 4. MERGE 陳述式 | SQL 2008 新語法 | 2008+ | 單一陳述式完成、效能最佳、需目標表有索引 |
| 5. Merge Join + Conditional Split | 資料流聯結分流 | 2005+ | 視覺化、無需程式碼、需排序 |
| 6. SCD Component | 第三方緩慢變維度元件 | 2005+ | 專為 SCD 設計、支援 Type 1/2、配置而非程式 |
ProductNumber 查詢資料庫 ProductIDProductID → 走更新路徑


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