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