Sql 将密钥迁移到新表

Sql 将密钥迁移到新表,sql,Sql,我有一个表,其中有一个键与另一个表相关,我需要更改该键以指向另一个表 表A是正在编辑的表,我正在将Id从表B旧的移动到表B新的 我无法编辑现有表的架构 前面的表A(无法编辑架构) 后面的表A Unique_Id TableB_Id 1 12 2 13 3 13 4 13 我有(尽管目前在电子表格中)这个映射 Old_Id New_Id 10 12 11 13 12

我有一个表,其中有一个键与另一个表相关,我需要更改该键以指向另一个表

表A是正在编辑的表,我正在将Id从表B旧的移动到表B新的

我无法编辑现有表的架构

前面的表A(无法编辑架构)

后面的表A

Unique_Id  TableB_Id
1          12
2          13
3          13
4          13
我有(尽管目前在电子表格中)这个映射

Old_Id     New_Id
10         12
11         13
12         13
显然,我不能逐一地将
10
替换为
12
11
替换为
13
12
替换为
13
,因为
TableB_Id
列将读取
13,13,13

希望这是有道理的。有什么想法吗

很明显,我不能用12,11代替10 加13,12加13,因为TableB_Id列将改为13, 13,13,13

为什么不呢?如果只按唯一的_ID更新,则一次只更新一行

这不管用吗:

-- Iterate over each row in excel file
Update TableA
Set TableB_Id = New_ID
Where Unique_ID = [new field to add to excel table corresponding to the unique_id]
很明显,我不能用12,11代替10 加13,12加13,因为TableB_Id列将改为13, 13,13,13

为什么不呢?如果只按唯一的_ID更新,则一次只更新一行

这不管用吗:

-- Iterate over each row in excel file
Update TableA
Set TableB_Id = New_ID
Where Unique_ID = [new field to add to excel table corresponding to the unique_id]

使用电子表格的内容创建一个名为
Mapping
的表

UPDATE  a
SET     TableB_Id = m.New_Id
FROM    TableA a
        INNER JOIN
                Mapping m
                ON a.TableB_Id = m.Old_ID

使用电子表格的内容创建一个名为
Mapping
的表

UPDATE  a
SET     TableB_Id = m.New_Id
FROM    TableA a
        INNER JOIN
                Mapping m
                ON a.TableB_Id = m.Old_ID

您是否建议通过
Unique\u Id
循环?我不知道您的代码示例如何阻止我所述的问题发生…?因为您仅在Unique\u Id=1时才将“10”更新为“12”,然后转到下一个Unique\u Id并更新该值…啊,你是说,
——迭代表A中的每一行吗?你是否建议通过
Unique\u Id
循环?我看不出你的代码示例如何阻止我所说的问题发生…?因为你只在Unique\u Id=1时才将“10”更新为“12”,然后转到下一个Unique\u Id并更新该值…啊,你的意思是说,
——然后迭代表A中的每一行
?抱歉,我的问题中有一个小错误——应该在前面和后面阅读表A。表B是另一个表我已经添加了说明。另一方面,如果
TableB\u Id
映射中没有等效项,这将怎么办?它会从
表a
中删除该记录吗?回答我自己的问题,是的。为了不这样做,我必须做一个
左连接
,是吗?它不会去掉它,但不会被修改。如果您将此作为
左联接执行
,则不匹配的行的TableB_Id值将改为
NULL
。抱歉,我在问题中犯了一个小错误-应该在前面和后面阅读表a。表B是另一个表我已经添加了说明。另一方面,如果
TableB\u Id
映射中没有等效项,这将怎么办?它会从
表a
中删除该记录吗?回答我自己的问题,是的。为了不这样做,我必须做一个
左连接
,是吗?它不会去掉它,但不会被修改。如果您将其作为
左联接执行
,则不匹配的行的TableB_Id值将改为
NULL