SQL Server 使用 Merge 關鍵字進行表數據同步

簡介

    Merge關鍵字是一個神奇的DML關鍵字。它在SQL Server 2008被引入,它能將Insert,Update,Delete簡單的併爲一句。MSDN對於Merge的解釋很是的短小精悍:」根據與源表聯接的結果,對目標表執行插入、更新或刪除操做。例如,根據在另外一個表中找到的差別在一個表中插入、更新或刪除行,能夠對兩個表進行同步。」,經過這個描述,咱們能夠看出Merge是關於對於兩個表之間的數據進行操做的。sql

    能夠想象出,須要使用Merge的場景好比:測試

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

 

使用Merge關鍵字的好處

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

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

  

 

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

   

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

     

 

     圖2.一個簡單的Merge語句基礎

  

     所形成的結果如圖3所示。date

     

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

 

 

     最終目標表的結果如圖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關鍵字只能更新一個表
  •     SQLSERVER 2008 以上版本
  •     源表中不能有重複的記錄

微軟MSDN的merge解釋:

傳送門:https://docs.microsoft.com/zh-cn/sql/t-sql/statements/merge-transact-sql

相關文章
相關標籤/搜索