適用於:SQL Server
Azure Data Factory 中的 SSIS Integration Runtime
在目前的 SQL Server Integration Services 版本中,執行 SQL 任務中的 SQL 陳述句可以包含一個MERGE陳述句。 此 MERGE 陳述句使你能在單一陳述中完成多個 INSERT、 UPDATE和 DELETE 運算。
要在套件中使用該 MERGE 語句,請依照以下步驟操作:
建立資料流程工作,以便將來源資料載入、轉換並儲存至暫存或臨時資料表。
建立一個包含該 MERGE 語句的執行 SQL 任務。
將 Data Flow 任務連接到 Execute SQL 任務,並以 staging table 中的資料作為語句的輸入MERGE。
注意
雖然在這種情況下,MERGE 陳述式通常需要暫存資料表,但 MERGE 陳述式的效能通常優於 Lookup 轉換所執行的逐列查找。 MERGE 當查找表的大小會測試查找轉換可用記憶體以快取參考表時,也非常有用。
使用 MERGE
通常,當你想套用包含從一個資料表到另一個資料表的插入、更新和刪除變更時,你會使用這個 MERGE 語句。 在 SQL Server 2008 (10.0.x) 之前,這項程序需要查閱轉換和多項 OLE DB 命令轉換。 查閱轉換會執行逐列查閱,以便判斷每個資料列是新的或已變更。 OLE DB 指令轉換接著執行必要的 INSERT、 UPDATE和 DELETE 操作。 自 SQL Server 2008(10.0.x)起,單一MERGE語句即可取代 Lookup 轉換及對應的 OLE DB 命令轉換。
MERGE 使用增量負載
SQL Server 2008 (10.0.x) 新增的異動資料擷取功能可讓您更輕易地針對資料倉儲可靠地執行累加式載入。 作為使用參數化 OLE DB 指令轉換來執行插入與更新的替代方案,您可以使用 陳述 MERGE 式將兩者合併。
如需詳細資訊,請參閱 將變更套用到目的地。
MERGE 在其他情境中
在以下情境中,你可以在整合服務套件外或內部使用該 MERGE 陳述。 不過,通常需要使用 Integration Services 套件,從多個異質來源載入這些資料,再加以整合與清理。 因此,為了方便及便於維護,你可以考慮在套件中使用 MERGE 陳述式。
追蹤購買習慣
資料倉儲中的 FactBuyingHabits 資料表會追蹤某位客戶上次購買給定產品的日期。 此資料表包含 ProductID、CustomerID 及 PurchaseDate 資料行。 交易式資料庫每週都會產生一份 PurchaseRecords 資料表,其中包含當週的購買記錄。 目標是用單一 MERGE 陳述將 PurchaseRecords 資料表中的資訊合併到 FactBuyingHabits 表中。 對於不存在的產品-客戶配對,MERGE 陳述式會插入新的資料列。 對於已存在的產品-顧客配對,MERGE 陳述式會更新最近一次購買日期。
追蹤價格記錄
DimBook 資料表代表書店存貨的書籍清單並識別每本書的價格記錄。 此資料表具有下列資料行:ISBN、ProductID、Price、Shelf 和 IsCurrent。 此資料表也會為該書曾有過的每個價格各設一個資料列。 其中一個資料列包含目前的價格。 為了指出哪一個資料列包含目前的價格,該資料列之 IsCurrent 資料行的值會設定為 1。
資料庫每週都會產生一份 WeeklyChanges 資料表,其中包含該週的價格變更以及當週加入的新書。 只要用單一 MERGE 語句,你就能將 WeeklyChanges 表格中的變更套用到 DimBook 表格。 該 MERGE 語句會為新加入的書籍插入新列,並將價格變動的既有書籍列更新為 0。 該 MERGE 敘述也會為價格變動的書籍插入新列,並對這些新列將 IsCurrent 欄位的值設為 1。
合併內含新資料的資料表與舊資料表
資料庫會使用「開放式結構描述」來設定物件屬性的模型;亦即,資料表包含每個屬性的成對名稱及數值。 Properties 資料表包含三個資料行:EntityID、PropertyID 和 Value。 NewProperties 資料表 (更新的資料表版本) 必須與 Properties 資料表同步處理。 要同步這兩個資料表,你可以用一個 MERGE 語句執行以下操作:
從 Properties 資料表中刪除屬性 (如果它們不存在 NewProperties 資料表中的話)。
使用在 NewProperties 資料表中找到的新值來更新 Properties 資料表中的屬性值。
針對位於 NewProperties 資料表但在 Properties 資料表中找不到的屬性,插入新的屬性。
這種方法在複寫狀況類似的狀況中很有用,因為其目標都是要在兩部同步處理的伺服器上保留兩份資料表中的資料。
追蹤存貨
Inventory 資料庫具有一份 ProductsInventory 資料表,其中包含 ProductID 和 StockOnHand 資料行。 含有 ProductID、CustomerID 和 Quantity 資料行的 Shipments 資料表會追蹤客戶的產品出貨。 ProductInventory 資料表必須根據 Shipments 資料表中的資訊每日更新。 單一 MERGE 報表可根據出貨量減少 ProductInventory 表格中的庫存。 如果某產品的庫存已降至 0,該 MERGE 陳述也可以從 ProductInventory 表格中刪除該產品列。