zoukankan      html  css  js  c++  java
  • 差异更新两个表

    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
    

      

  • 相关阅读:
    linux下文件编码转换
    linux下打开文件数
    从hive0.7.1升级到hive0.8.1
    hive使用过程中碰到的问题
    JVM和GC
    代码生成器开发设计
    开源代码生成器:SmartCode [转]
    byte与其他类型的转换
    测试版天思.net代码生成器
    [源码试]写xml的解析器
  • 原文地址:https://www.cnblogs.com/intheway/p/5625043.html
Copyright © 2011-2022 走看看