1. 程式人生 > >SQL Server中的Merge Into

SQL Server中的Merge Into

通過 例如 庫存 com borde del 進行 基礎上 date

簡介

Merge關鍵字是一個神奇的DML關鍵字。它在SQL Server 2008被引入,它能將Insert,Update,Delete簡單的並為一句。MSDN對於Merge的解釋非常的短小精悍:”根據與源表聯接的結果,對目標表執行插入、更新或刪除操作。例如,根據在另一個表中找到的差異在一個表中插入、更新或刪除行,可以對兩個表進行同步。”,通過這個描述,我們可以看出Merge是關於對於兩個表之間的數據進行操作的。

可以想象出,需要使用Merge的場景比如:

  • 數據同步
  • 數據轉換
  • 基於源表對目標表做Insert,Update,Delete操作

使用Merge關鍵字的好處

首先是更加短小精悍的語句,在SQL Server 2008之前沒有Merge的時代,基於源表對目標表進行操作需要分別寫好幾條Insert,Update,Delete。而使用Merge,僅僅需要使用一條語句就好。下面我們來看一個例子。

首先建立源表和目標表,並插入相關的數據,如圖1所示。

技術分享

圖1.創建測試表並插入測試數據

下面我們來寫一個簡單的Merge語句,如圖2所示。

技術分享

圖2.一個簡單的Merge語句

所造成的結果如圖3所示。

技術分享

圖3.Merge語句對於目標表的更新

最終目標表的結果如圖4所示。

技術分享

圖4.最後目標表的結果

Merge語句還有一個強大的功能是通過OUTPUT子句,可以將剛剛做過變動的數據進行輸出。我們在上面的Merge語句後加入OUTPUT子句,如圖5所示。

技術分享

圖5.Merge語句後加上OUTPUT子句

此時Merge操作完成後,將所變動的語句進行輸出,如圖6所示。

技術分享

圖6.輸出Merge操作產生的數據變更

當然了,上面的Merge關鍵字後面使用了多個WHEN…THEN語句,而這個語句是可選的.也可以僅僅新增或是僅僅刪除,如圖7所示。

技術分享

圖7.僅僅插入的Merge語句

我們還可以使用TOP關鍵字限制目標表被操作的行,如圖8所示。在圖2的語句基礎上加上了TOP關鍵字,我們看到只有兩行被更新。

技術分享

圖8.使用TOP關鍵字的Merge語句

但僅僅是MATCHED這種限制條件往往不能滿足實際需求,我們可以在圖7那個語句的基礎上加上AND附加上額外的限制條件,如圖9所示。

技術分享

圖9.加上了AND限制條件的Merge語句

Merge關鍵字的一些限制

  • 使用Merge關鍵字只能更新一個表
  • 源表中不能有重復的記錄

小結

本文簡單說明了Merge關鍵的字的使用。如果你使用的是SQL Server 2008之後的版本,在面對一些比如庫存結賬之類的業務時,放棄IF…ELSE和手寫UPDATE,Insert吧,使用Merge關鍵字可以使這類操作更加輕松愉悅。

本文轉載自:http://www.cnblogs.com/CareySon/archive/2012/03/07/2383690.html

SQL Server中的Merge Into