差异更新两个表

Posted liangzaian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了差异更新两个表相关的知识,希望对你有一定的参考价值。

CREATE TABLE Temp_A
    (
      Emp_No VARCHAR(7) ,
      Emp_Name VARCHAR(20)
    )

CREATE TABLE Temp_B
    (
      Emp_No VARCHAR(7) ,
      Emp_Name VARCHAR(20)
    )

INSERT  INTO Temp_A
VALUES  ( 0000001, 张飞 )
INSERT  INTO Temp_A
VALUES  ( 0000002, 吕布 )
INSERT  INTO Temp_A
VALUES  ( 0000003, 关羽 )
INSERT  INTO Temp_A
VALUES  ( 0000004, 貂蝉 )
INSERT  INTO Temp_A
VALUES  ( 0000005, 孙权 )

INSERT  INTO Temp_B
        SELECT TOP 4
                *
        FROM    Temp_A

-- 使用Merge更新表
MERGE INTO Temp_B b
USING Temp_A a
ON a.Emp_No = b.Emp_No
--WHEN MATCHED 
--THEN UPDATE SET b.Emp_Name=a.Emp_Name
WHEN NOT MATCHED THEN
    INSERT
    VALUES ( a.Emp_No, a.Emp_Name );

-- 使用EXISTS找出A表中存在, B表中不存在的
INSERT  INTO Temp_B
        SELECT  *
        FROM    Temp_A a
        WHERE   NOT EXISTS ( SELECT *
                             FROM   Temp_B b
                             WHERE  a.Emp_No = b.Emp_No )

-- 更新B表中和A表中工号一样的员工姓名 注意 更新的表需要用全名

UPDATE  Temp_B
SET     Temp_B.Emp_Name = a.Emp_Name
FROM    Temp_A a
WHERE   a.Emp_No = Temp_B.Emp_No

 

以上是关于差异更新两个表的主要内容,如果未能解决你的问题,请参考以下文章

比较具有相同模式的两个表以获得数据差异

为啥尽管源代码没有变化,但从一个系统到另一个系统的片段数量却有很大差异?

MySQL如何对比两个表数据的异同

比较两个mysql数据库表结构的差异

回归 | js实用代码片段的封装与总结(持续更新中...)

在 MS Access 或 SQL Server 中查找 2 个表之间的差异