在SQL中,在联接上添加一组相应的值
假设我有表A包含:在SQL中,在联接上添加一组相应的值,sql,sql-server,merge,insert,Sql,Sql Server,Merge,Insert,假设我有表A包含: ID OldValue 3 16 1 5 和表B包含 ID Value OldValue 1 2 NULL 2 4 NULL 3 8 NULL 我想将表A中的旧值插入表B中,其中ID相等,结果是: 更新的表格\u B ID Value OldValue 1 2 5 2 4 NULL 3 8 16 是否有一种基于集合的方法可以不使用光标来执行此操作?在现实生活中,这将发
ID OldValue
3 16
1 5
和表B包含
ID Value OldValue
1 2 NULL
2 4 NULL
3 8 NULL
我想将表A中的旧值插入表B中,其中ID相等,结果是:
更新的表格\u 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 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;
MERGE INTO Table_B
USING Table_A
ON Table_B.ID = Table_A.ID
WHEN MATCHED THEN
UPDATE
SET OldValue = Table_A.OldValue;