首页 > 解决方案 > 通过在不同的表中查找来更新 SQL 中的记录

问题描述

我正在将 SQL 服务器 A 中的几个表中的数据复制到 B。我在 B 中有一组临时表,需要根据 B 中最终目标表中的更新值更新其中一些临时表。

例子:

服务器 B:

暂存表1:

ID | NAME | CITY
1    ABC    XYZ
2    BCD    XXX

暂存表2:

ID | AGE | Table1ID(FK)
10    15    1
20    16    2

将 StagingTable1 复制到 TargetTable1 后(ID 被自动填充,我得到新的 ID,现在 ID 1 变为 2,ID 2 变为 3)

目标表1:

ID  | NAME | CITY
1     PQR    YYY  (pre-existing record)
2     ABC    XYZ
3     BCD    XXX

所以现在在我可以复制 StagingTable2 之前,我需要通过 TargetTable1 中的正确值来更新其中的 Table1ID 列。

StagingTable2 应该变成:

ID | AGE | Table1ID(FK)
10    15    2
20    16    3

我正在为此编写一个存储过程,但不确定如何查找和更新临时表中的记录?

标签: sqlsql-servertsqlstored-proceduressql-update

解决方案


假设元组在和(name, city)中是唯一的,您可以使用可更新的公用表表达式来生成新的映射并分配相应的值:StagingTable1TargetTable1

with cte as (
    select st2.Table1ID, tt1.id
    from StagingTable2 st2
    inner join StagingTable1 st1 on st1.ID = st2.Table1ID
    inner join TargetTable1 tt1 on tt1.name = st1.name and tt1.city = st1.city
)
update cte set Table1ID = id

DB Fiddle 上的演示-StagingTable2之后的update

编号 | 年龄 | 表 1ID
-: | --: | --------:
10 | 15 | 2
20 | 16 | 3

推荐阅读