SQL2008 Merge關鍵字用法與簡例

2022-02-06 08:27:40 字數 3210 閱讀 6592

--  author : htl258(tony)

--  date   : 2010-04-25 01:10:28

--  version:microsoft sql server 2008 (rtm) - 10.0.1600.22 (intel x86)

--          jul  9 2008 14:43:38

--          developer edition on windows nt 5.1 (build 2600: service pack 3)

--  blog   :

--  subject: sql2008 merge關鍵字用法與簡例

--merge 語法是對錶進行插入,更新,刪除這三個操作的合併。

--根據與源表聯接的結果,對目標表執行插入、更新或刪除操作。

--merge 語法包括如下五個主要子句:

--  merge 子句用於指定作為插入、更新或刪除操作目標的表或檢視。

--  using 子句用於指定要與目標聯接的資料來源。

--  on 子句用於指定決定目標與源的匹配位置的聯接條件。

--  when 子句用於根據on 子句的結果指定要執行的操作。

--  output 子句針對更新、插入或刪除的目標物件中的每一行返回一行。

--示例:

use tempdb

go--建立表a

if not object_id('[a]') is null

drop table [a]

gocreate table a(id int,acol varchar(10))

goinsert a values(1,n'a')

insert a values(2,n'b')

insert a values(3,n'c')

insert a values(6,n'x') --此記錄在b表中不存在,刪除

go--建立表b

if not object_id('[b]') is null

drop table [b]

gocreate table b(id int,bcol varchar(10),xcol varchar(10))

goinsert b values(1,n'a',n't')  --1的id與a表id匹配且指定值與a表指定值對應相同,不變

insert b values(2,n'p',n'o')  --2和的id與a表id匹配,指定值與a表指定值對應不同,更新

insert b values(3,n'p',n'n')

insert b values(4,n'l',n'y')  --4和的id與a表id匹配,指定值在a表中對應不存在,插入

insert b values(5,n'e',n's') 

go--開始合併兩個表:

merge a --要處理的表

using b --參照的表

on a.id=b.id --關聯條件

when not matched then insert values(b.id,b.bcol) --如果要處理表沒有參照表上的記錄,則插入

when matched then update set a.acol=b.bcol --如果記錄匹配,就更新目標表的匹配行

when not matched by source then delete --如果要處理表的記錄在參照表上不存在,則刪除

output $action, inserted.*, deleted.*; --相當於輸出以上語句的操作記錄

/*--result:

$action    id          acol       id          acol

insert     4           l          null        null

insert     5           e          null        null

update     1           a          1           a

update     2           p          2           b

update     3           p          3           c

delete     null        null       6           x

(6 行受影響)

--看看a表更新成什麼樣:

select * from a

id          acol

1           a

2           p

3           p

4           l

5           e

(5 行受影響)

--再變換乙個字段

merge a --要處理的表

using b --參照的表

on a.id=b.id --關聯條件

when not matched then insert values(b.id,b.xcol)

when matched then update set a.acol=b.xcol

when not matched by source then delete

output $action, inserted.*, deleted.*;

/*--result:

$action    id          acol       id          acol

update     1           t          1           a

update     2           o          2           p

update     3           n          3           p

update     4           y          4           l

update     5           s          5           e

(5 行受影響)

--再看看現在的a表像什麼樣

select * from a

id          acol

1           t

2           o

3           n

4           y

5           s

(5 行受影響)

SqlServer中merge關鍵字

在一些業務中,經常會用到對資料的比對,不存在插入,在源表中存在則更新,在源表不存在目標表存在則刪除,一般都是會通過if else判斷,merge關鍵字是乙個神奇的dml關鍵字。它在sql server 2008被引入,它能將insert,update,delete簡單的並為一句。首先建立兩張表,源表...

SQL Server中的Merge關鍵字

merge關鍵字是乙個神奇的dml關鍵字。它在sql server 2008被引入,它能將insert,update,delete簡單的並為一句。msdn對於merge的解釋非常的短小精悍 根據與源表聯接的結果,對目標表執行插入 更新或刪除操作。例如,根據在另乙個表中找到的差異在乙個表中插入 更新或...

SQL Server中的Merge關鍵字

merge關鍵字是乙個神奇的dml關鍵字。它在sql server 2008被引入,它能將insert,update,delete簡單的並為一句。msdn對於merge的解釋非常的短小精悍 根據與源表聯接的結果,對目標表執行插入 更新或刪除操作。例如,根據在另乙個表中找到的差異在乙個表中插入 更新或...