Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用多行更新链接表_Sql_Sql Server_Tsql_Join_Sql Server 2000 - Fatal编程技术网

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]的副本
如果需要,只需将它们设置为相同的数字即可。