Sql 使用多行更新链接表
我有一个表结构如下的现有数据库:Sql 使用多行更新链接表,sql,sql-server,tsql,join,sql-server-2000,Sql,Sql Server,Tsql,Join,Sql Server 2000,我有一个表结构如下的现有数据库: 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_
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
的行,以便每个ChildA
都有一个ChildB
。新的结构应该是
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\u Id
都是相同的。我需要为每个ChildB
选择一个唯一的ChildA
,即使我必须随机选择它们
这适用于每个表中只有一行的情况:
UPDATE b
SET [ChildA_ID] = a.[ChildA_ID]
FROM [ChildB] b
INNER JOIN [ChildA] a ON a.[Parent_ID] = b.[Parent_ID]
我没有任何其他条件可添加到
加入
。我认为行号
可以工作,但该数据库运行在SQL Server 2000上。当存在多个记录时,我如何为每个ChildA_ID
分配ChildA_ID
请注意,在将必需的ChildA_ID
添加到表ChildB
后,不再需要对Parent
的fk引用(因为它可以通过ChildA
派生)。要获取行号,您可以选择/转储两个子表到临时表中,并使用一个新列—id之前的子表的COUNT()
(虽然很昂贵)。@Clockwork Muse[ChildB].[Parent\u id]
不再是必需的,但为了向后兼容,我不得不保留它。我想我可以使用带有IDENTITY
字段的temp table/table变量,但我不确定如何构造脚本。我最初也想过使用IDENTITY
字段,但每次更改Parent\u ID
时都必须重置它(因为我敢打赌,你的a和b的数量并不完全相同)。但是,是的,否则就行了——你可能会在这里找到其他问题来解决这个问题。@Clockwork缪斯说得对,它们并不总是相同的数字,但通常都是。我实际上可以创建[ChildB]的副本
如果需要,只需将它们设置为相同的数字即可。