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)行同步∏交”,通過這個(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. 首先是更加短小精悍的語句立砸,在SQL Server 2008之前沒有Merge的時(shí)代,基于源表對(duì)目標(biāo)表進(jìn)行操作需要分別寫好幾條Insert,Update,Delete痘拆。而使用Merge,僅僅需要使用一條語句就好仰禽。下面我們來看一個(gè)例子。

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


    圖1.png

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


圖2.png

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


圖3.png

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


圖4.png

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


圖5.png

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


圖6.png

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


圖7.png

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


圖8.png

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


圖9.png

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

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

小結(jié)

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末汰瘫,一起剝皮案震驚了整個(gè)濱河市狂打,隨后出現(xiàn)的幾起案子擂煞,更是在濱河造成了極大的恐慌,老刑警劉巖趴乡,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件对省,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡晾捏,警方通過查閱死者的電腦和手機(jī)蒿涎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惦辛,“玉大人劳秋,你說我怎么就攤上這事∨制耄” “怎么了玻淑?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)呀伙。 經(jīng)常有香客問我补履,道長(zhǎng),這世上最難降的妖魔是什么剿另? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任箫锤,我火速辦了婚禮贬蛙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘谚攒。我一直安慰自己阳准,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布馏臭。 她就那樣靜靜地躺著溺职,像睡著了一般。 火紅的嫁衣襯著肌膚如雪位喂。 梳的紋絲不亂的頭發(fā)上浪耘,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音塑崖,去河邊找鬼七冲。 笑死,一個(gè)胖子當(dāng)著我的面吹牛规婆,可吹牛的內(nèi)容都是我干的澜躺。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼抒蚜,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼掘鄙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起嗡髓,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤操漠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后饿这,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體浊伙,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年长捧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嚣鄙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡串结,死狀恐怖哑子,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情肌割,我是刑警寧澤卧蜓,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站声功,受9級(jí)特大地震影響烦却,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜先巴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一其爵、第九天 我趴在偏房一處隱蔽的房頂上張望冒冬。 院中可真熱鬧,春花似錦摩渺、人聲如沸简烤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至柬赐,卻和暖如春绰姻,著一層夾襖步出監(jiān)牢的瞬間枉侧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工狂芋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留榨馁,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓帜矾,卻偏偏與公主長(zhǎng)得像翼虫,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子屡萤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容