Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL中,在联接上添加一组相应的值_Sql_Sql Server_Merge_Insert - Fatal编程技术网

在SQL中,在联接上添加一组相应的值

在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 是否有一种基于集合的方法可以不使用光标来执行此操作?在现实生活中,这将发

假设我有表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
是否有一种基于集合的方法可以不使用光标来执行此操作?在现实生活中,这将发生在非常大的表和游标上,因为我们都知道它们很慢。也许是某种合并

我使用的是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;