问题描述
|
假设我有Table_A包含:
ID OldValue
3 16
1 5
并且Table_B包含
ID Value OldValue
1 2 NULL
2 4 NULL
3 8 NULL
并且我想将Table_A中的OldValues插入ID相等的Table_B中,结果是:
更新了Table_B
ID Value OldValue
1 2 5
2 4 NULL
3 8 16
有没有使用游标的基于集合的方法?在现实生活中,这将在非常大的表和游标上进行,众所周知,这很慢。也许某种合并?
我在使用sql Server 2008
解决方法
Update Table_B
Set OldValue = A.OldValue
From Table_A As A
Join Table_B As B
On B.ID = A.ID
,您想要一个“更新自”
UPDATE B
SET B.OldValue = A.OldValue
FROM Table_B B
INNER JOIN Table_A ON B.ID = A.ID
通常,我将其写为选择,然后一旦获得结果,便将其转换为更新。
,简单:
update x set OldValue = a.OldValue
from Table_B x
join Table_A a on x.ID = a.ID
,使用联接:
UPDATE TABLE_B
SET OLDAVLUE=A.OLDVALUE
FROM TABLE_B B
LEFT JOIN TABLE_A A ON B.ID=A.ID
, 也许某种合并?
确实。以下是SQL Server 2008支持的标准SQL:
MERGE INTO Table_B
USING Table_A
ON Table_B.ID = Table_A.ID
WHEN MATCHED THEN
UPDATE
SET OldValue = Table_A.OldValue;