SQL Server:使用另一个表中的记录更新表

时间:2016-06-19 16:12:36

标签: sql sql-server-2012 multiple-tables update-statement

我在SQL Server 2012数据库中有2个表employeeemployee_historyemployee表包含所有员工的当前信息,employee_history表跟踪每个员工的详细信息所发生的所有更改。

我的要求是使用employee表中每位员工的最新记录更新employee_history表中的每条记录。

例如:

employee表:

enter image description here

employee_history表:

enter image description here

employee表更新后的

employee_history表应为:

enter image description here

请注意:因为这只是一个例子,我只添加了最少的信息。但是,employeeemployee_history表都有很多其他列。并且每个表中有一些列不存在于另一个表中。我不应该更新这些列。

请告诉我最简单的方法是什么?

2 个答案:

答案 0 :(得分:2)

使用CTE正确连接表格。

;with hist as (
select *, row_number() over(partition by emp_id order by updated_date desc) rn
from employee_history
)
update employee
set Emp_First_Name = hist.Emp_First_Name --,more cols
from employee e
inner join hist on e.Emp_id = hist.emp_id and hist.rn = 1

答案 1 :(得分:0)

update a 
   set a.Emp_first_name = b.emp_first_name,
       a.emp_last_name  = b.emp_last_name, 
       a.Emp_Phone      = b.Emp_phone, 
       a.Emp_Address    = b.Emp_address, 
       a.Emp_dept       = b.Emp_dept
from employee as a
join  ( select * 
             , row_number over (partition by emp_id order by Updated_date  desc) as rn
        from employee_history  
      ) as b 
 on b.emp_id = a.emp 
and b.rn = 1

update