SQLSERVER MERGE概要

SQLSERVER MERGE

 

SQL Server 2008提供了一个增强的SQL命令Merge,用法参看MSDN:http://msdn.microsoft.com/zh-cn/library/bb510625.aspx
功能:根据与源表联接的结果,对目标表执行插入、更新或删除操作。例如,根据在另一个表中找到的差异在一个表中插入、更新或删除行,可以对两个表进行同步。
语法解释:     
        Mergo Into 目标表 as T
        Using 源表 as S
        ON 匹配条件
        when matched and [其它条件] then
         对源表与目标表匹配的项执行的操作
        when not matched [其它条件] then 
           对源表中存在的,而目标表中不存在的匹配项执行操作
         when not matched by source and [其它条件] then
           对目标表中存在的,而源表中不存在的匹配项执行操作;
      注意事项 1.最后的分号必须有
                     2.源表可以是一个具体的表,也可以是一个子查询语句
 
代码示例:
DECLARE  @TABLE_FROM TABLE
(
TID UNIQUEIDENTIFIER NOT NULL PRIMARY KEY,
TNO VARCHAR(50) NULL,
TNAME VARCHAR(500) NULL,
TDESC VARCHAR(500) NULL
)
 
DECLARE  @TABLE_TO TABLE
(
TID UNIQUEIDENTIFIER NOT NULL PRIMARY KEY,
TNO VARCHAR(50) NULL,
TNAME VARCHAR(500) NULL,
TDESC VARCHAR(500) NULL
)
 
INSERT INTO @TABLE_FROM 
(
TID,TNO ,TNAME,TDESC
) VALUES 
(NEWID(),'001','北京','华北地区'),
(NEWID(),'002','天津','华北地区'),
(NEWID(),'003','上海','华东地区'),
(NEWID(),'004','广州','华南地区'),
(NEWID(),'005','深圳','华南地区'),
(NEWID(),'006','杭州','华东地区'),
(NEWID(),'007','武汉','华中地区'),
(NEWID(),'008','苏州','华东地区')
 
merge @TABLE_TO as a
using @table_from as b
on a.TID=b.tid and 1=1
when not matched by source then
delete 
when not matched by target then
insert (TID,TNO,TNAME,TDESC) values (b.TID,b.TNO,b.TNAME,b.TDESC)
when matched then 
update set a.TID=b.TID,a.TNO=b.TNO,a.TNAME=b.TNAME,a.TDESC=b.TDESC;
 
select * from @TABLE_FROM
select * from @TABLE_TO