首页 > 解决方案 > 使用 SQL 映射 ID 值

问题描述

假设您有 2 个数据库,两者都具有匹配的表结构。例如,

D1.T1(ID, VAL) = D2.T1(ID,VAL)
D1.T2(ID, NAME,FID) = D2.T2(ID, NAME,FID)

在哪里D1.T2.FID = D1.T1.ID

现在我想将行从 D1 复制到 D2。但是在插入 D2 期间 ID 值会发生变化(不是因为我无法使用 IDENTITY_INSERT 强制插入相同的 ID,而是因为 D2.T1 中存在相同的 ID 用于其他一些值)。

现在我需要用新的身份值更新 D2.T2。如何在不更改表的情况下做到这一点(将 old_id 值保留在 D2.T1 中,稍后通过比较旧的 id 值在 D2.T2 上进行更新)?

要给出表结构的提示,请参见下文。

D1.T1

ID, VAL
4934, A
4936, B
5011, C

D1.T2

ID, NAME, FKID
2478, I, 4934
2479, II, 4936
2481, III, 5011

D2.T1

ID, VAL
7813, A
7817, B
7819, C

D2.T2

ID, NAME, FKID
3416, I, 7813
3417, II, 7817
3419, III, 7819

标签: sql-serveridentityuniqueidentifier

解决方案


因此,例如,我们现在遇到一个

   D1.T1  of 7813, D  

然后发现D2.T1中已经存在7813了??

“但在插入 D2 期间 ID 值会发生变化”

它变成了什么?说9876??所以现在 D2.T1 将是 9876, D

好吧,让我们继续尝试复制

   D1.T2  of  2482, IIII, 7813  

BUT WAIT >> 我们怎么知道这个 7813 是指 7813, A 还是 7813, D

我们不知道,我们无法确定是否需要保留 7813 或更改为 9876。

因此,我们需要更多位于表中的信息,例如另一列。


推荐阅读