SQL Server 2008 开始支持 MERGE语句
-- 源表 CREATE
TABLE test_from (id INT , val
VARCHAR (20)); -- 目标表 CREATE
TABLE test_to (id INT , val
VARCHAR (20)); -- 插入源表 INSERT
INTO test_from VALUES
(1, 'A' ); INSERT
INTO test_from VALUES
(2, 'B' ); -- 合并 源表到目标表 MERGE test_to USING test_from ON
( test_to.id = test_from.id ) -- 条件是 id 相同 WHEN
MATCHED THEN UPDATE
SET test_to.val = test_from.val
-- 匹配的时候,更新 WHEN
NOT MATCHED THEN
INSERT VALUES (test_from.id, test_from.val)
-- 源表有,目标表没有,插入 WHEN
NOT MATCHED BY
SOURCE THEN
DELETE ; -- 目标表有,源表没有,目标表该数据删除. -- 第一次检查 目标表数据. SELECT
* FROM test_to; ![]() id val ----------- --------------------
1 A
2 B -- 更新源表 UPDATE
test_from SET val =
'A2' WHERE
id = 1; -- 删除源表 DELETE
FROM test_from WHERE
id = 2; -- 插入源表 INSERT
INTO test_from VALUES
(3, 'C' ); -- 合并 源表到目标表 MERGE test_to USING test_from ON
( test_to.id = test_from.id ) -- 条件是 id 相同 WHEN
MATCHED THEN UPDATE
SET test_to.val = test_from.val
-- 匹配的时候,更新 WHEN
NOT MATCHED THEN
INSERT VALUES (test_from.id, test_from.val)
-- 源表有,目标表没有,插入 WHEN
NOT MATCHED BY
SOURCE THEN
DELETE ; -- 目标表有,源表没有,目标表该数据删除. -- 再次检查 目标表数据. SELECT
* FROM test_to; id val ----------- --------------------
1 A2
3 C |