2010-03-16 31 views
1

一位开发人员更改了表mapuserid列中的所有值。我需要他们改回来,因为userid也是profiles表中的关键。值得庆幸的是,由于不值得进入的原因,mapprofiles共享另一列,employeeId从表X中填充来自表Y的值列表

所以我想作为profiles查出服用的所有值userid并覆盖在useridmap匹配的行中的值。

我的直觉是做这样的事情:

UPDATE map,profiles 
SET map.userid = profiles.userid 
WHERE map.employeeId = profiles.employeeId 

但SQLServer的2005年不关心有UPDATE子句中两个表。

有什么建议吗?

回答

6

您可以在更新有FROM子句:

UPDATE m 
SET m.userid = profiles.userid 
from map m 
inner join profiles on m.employeeId = profiles.employeeId 
+1

这个别名的形式更清晰,恕我直言。它更明确地将UPDATE和FROM链接起来。 – gbn 2010-03-16 18:42:00

3

在T-SQL语法,更新部分包含要更新的内容,并且FROM 可能包含额外的数据源(S)。

请尝试以下

UPDATE map 
SET map.userid = profiles.userid 
FROM profiles 
WHERE map.employeeId = profiles.employeeId 

更新语法:http://msdn.microsoft.com/en-us/library/ms177523.aspx