差异更新两个表

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

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

DELETE FROM Temp_a

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

-- 方法二 使用连接方式
UPDATE  b
SET     b.Emp_Name = a.Emp_Name
FROM    dbo.Temp_B b
LEFT JOIN dbo.Temp_A a ON a.Emp_No = b.Emp_No

  

原文地址:https://www.cnblogs.com/intheway/p/5625043.html