-- 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的解釋非常的短小精悍 根據與源表聯接的結果,對目標表執行插入 更新或刪除操作。例如,根據在另乙個表中找到的差異在乙個表中插入 更新或...