如何在一个表的行与另一个表的行不同时更新表

时间:2014-04-11 09:32:19

标签: sql-server

我有一个table table1和一个临时表temp2。 Temp2包含我想在table1中更新的更新值。因此,对于任何不同的行,我想要将值从Temp2更新为表1.我尝试了类似这样的东西,但它不起作用。

update Role_Master set Role_Desc=Role_Descc , Role_Version_Number =Role_Version_Number+1,Role_Dept=Role_Deptt,Role_All_Clients=Role_All_Clientss,
            Role_Admin=Role_Adminn,Role_Super_Admin=Role_Super_Adminn,Role_Modified_Date = GETDATE(),Role_Modified_By = 'T6086' FROM  #TEMP1 where Role_ID in
            (SELECT #TEMP1.Role_IDD FROM #TEMP1  LEFT JOIN Role_Master ON (#TEMP1.Role_Descc = Role_Master.Role_Desc and #Temp1.Role_Deptt=Role_Master.Role_Dept)
            WHERE Role_Master.Role_Desc is null and Role_Master.Role_Dept IS NULL)

1 个答案:

答案 0 :(得分:0)

很难在不知道两个表的模式的情况下帮助你......但是应该可以加入这两个表并根据where条件决定哪些行要更新...看看这个简单的例子......也许它有帮助

create table #temp1 (id int, val nvarchar(100))
create table #temp2 (id int, val nvarchar(100))

insert into #temp1 (id, val) values (1, 'eins')
insert into #temp1 (id, val) values (2, 'eins')
insert into #temp1 (id, val) values (3, 'eins')

insert into #temp2 (id, val) values (1, 'zwei')
insert into #temp2 (id, val) values (2, 'eins')
insert into #temp2 (id, val) values (3, 'eins')

update #temp1 set #temp1.val = b.val
    from #temp1 a join #temp2 b on a.id = b.id
    where a.val <> b.val

select @@rowcount           -- returns 1 because 1 row was updated
select * from #temp1