SQL Server中的Merge關(guān)鍵字

Merge關(guān)鍵字是一個(gè)神奇的DML關(guān)鍵字。它在SQL Server 2008被引入,它能將Insert,Update,Delete簡(jiǎn)單的并為一句。MSDN對(duì)于Merge的解釋非常的短小精悍:”根據(jù)與源表聯(lián)接的結(jié) 果,對(duì)目標(biāo)表執(zhí)行插入、更新或刪除操作。例如,根據(jù)在另一個(gè)表中找到的差異在一個(gè)表中插入、更新或刪除行,可以對(duì)兩個(gè)表進(jìn)行同步?!?通過(guò)這個(gè)描述,我們 可以看出Merge是關(guān)于對(duì)于兩個(gè)表之間的數(shù)據(jù)進(jìn)行操作的, 可以想象出,需要使用Merge的場(chǎng)景比如:

  • 數(shù)據(jù)同步
  • 數(shù)據(jù)轉(zhuǎn)換
  • 基于源表對(duì)目標(biāo)表做Insert,Update,Delete操作

使用Merge關(guān)鍵字的好處

  1. 首先是更加短小精悍的語(yǔ)句,在SQL Server 2008之前沒(méi)有Merge的時(shí)代,基于源表對(duì)目標(biāo)表進(jìn)行操作需要分別寫(xiě)好幾條Insert,Update,Delete。而使用Merge,僅僅需要使用一條語(yǔ)句就好。下面我們來(lái)看一個(gè)例子。

    首先建立源表和目標(biāo)表,并插入相關(guān)的數(shù)據(jù),如圖1所示。


    圖1.png

下面我們來(lái)寫(xiě)一個(gè)簡(jiǎn)單的Merge語(yǔ)句,如圖2所示。


圖2.png

所造成的結(jié)果如圖3所示。


圖3.png

最終目標(biāo)表的結(jié)果如圖4所示。


圖4.png

Merge語(yǔ)句還有一個(gè)強(qiáng)大的功能是通過(guò)OUTPUT子句,可以將剛剛做過(guò)變動(dòng)的數(shù)據(jù)進(jìn)行輸出。我們?cè)谏厦娴腗erge語(yǔ)句后加入OUTPUT子句,如圖5所示。


圖5.png

此時(shí)Merge操作完成后,將所變動(dòng)的語(yǔ)句進(jìn)行輸出,如圖6所示。


圖6.png

當(dāng)然了,上面的Merge關(guān)鍵字后面使用了多個(gè)WHEN…THEN語(yǔ)句,而這個(gè)語(yǔ)句是可選的.也可以?xún)H僅新增或是僅僅刪除,如圖7所示。


圖7.png

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


圖8.png

但僅僅是MATCHED這種限制條件往往不能滿(mǎn)足實(shí)際需求,我們可以在圖7那個(gè)語(yǔ)句的基礎(chǔ)上加上AND附加上額外的限制條件,如圖9所示。


圖9.png

Merge關(guān)鍵字的一些限制

  • 使用Merge關(guān)鍵字只能更新一個(gè)表
  • 源表中不能有重復(fù)的記錄

小結(jié)

本文簡(jiǎn)單說(shuō)明了Merge關(guān)鍵的字的使用。如果你使用的是SQL Server 2008之后的版本,在面對(duì)一些比如庫(kù)存結(jié)賬之類(lèi)的業(yè)務(wù)時(shí),放棄IF…ELSE和手寫(xiě)UPDATE,Insert吧,使用Merge關(guān)鍵字可以使這類(lèi)操作更加輕松愉悅。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容