我有一个现有的数据库,其表结构如下:
TABLE [Parent]
[Parent_ID] UNIQUEIDENTIFIER
TABLE [ChildA]
[ChildA_ID] INT
[Parent_ID] UNIQUEIDENTIFIER FK -> [Parent].[Parent_ID]
TABLE [ChildB]
[ChildB_ID] INT
[Parent_ID] UNIQUEIDENTIFIER FK -> [Parent].[Parent_ID]
为了支持将来的功能,我需要ChildA
和ChildB
的链接行,以便每个ChildB
只有一个ChildA
。新结构应该是
TABLE [ChildA]
[ChildA_ID] INT
[Parent_ID] UNIQUEIDENTIFIER FK -> [Parent].[Parent_ID]
TABLE [ChildB]
[ChildB_ID] INT
[ChildA_ID] INT FK -> [ChildA].[ChildA_ID]
[Parent_ID] UNIQUEIDENTIFIER FK -> [Parent].[Parent_ID]
现在,两个表都在ChildA
和ChildB
表中包含几个重复的行。为了这个问题,我们假设每个表中的行数对于任何给定的Parent_Id
都是相同的。我需要为每个ChildA
选择一个唯一的ChildB
,即使我必须随机选择它们。
这适用于每个表中只有一行的情况:
UPDATE b
SET [ChildA_ID] = a.[ChildA_ID]
FROM [ChildB] b
INNER JOIN [ChildA] a ON a.[Parent_ID] = b.[Parent_ID]
我没有任何其他条件可以添加到JOIN
。我认为ROW_NUMBER
可以工作,但是这个数据库在SQL Server 2000上运行。当有多个记录时,如何为每个ChildA_ID
分配ChildB_ID
?