一对多自我关系(Tsql)上的重复数据
时间:2020-03-06 14:45:16 来源:igfitidea点击:
抱歉,标题的描述性很差,但是我现在不能做得更好=(
因此,我有这个主从方案,细节是具有n个级别的树结构(一对多自相关)(在SQLServer 2005上)
我需要通过使用源主ID和目标主ID作为参数(目标是新的,因此它没有详细信息),使用存储过程将一个详细结构从一个主结构复制到另一个主结构。
我遇到了麻烦,请我们寻求帮助,以找到一种跟踪父代ID的方法,并在不使用游标或者类似此类讨厌内容的情况下插入子代...
问题的表格模型http://i38.tinypic.com/2vs3n7d.jpg
当然,这是一个示例模型,我要做的是将详细结构从一个母版复制到另一个母版。实际上,我正在使用现有的模板作为模板创建一个新的模板。
解决方案
我们将必须提供create table并将其插入到少量样本数据的语句中。
和基于此样本数据的预期结果。
如果我了解问题所在,则可能是我们想要的:
INSERT dbo.Master VALUES (@NewMaster_ID, @NewDescription) INSERT dbo.Detail (parent_id, master_id, [name]) SELECT detail_ID, @NewMaster_ID, [name] FROM dbo.Detail WHERE master_id = @OldMaster_ID UPDATE NewChild SET parent_id = NewParent.detail_id FROM dbo.Detail NewChild JOIN dbo.Detail OldChild ON NewChild.parent_id = OldChild.detail_id JOIN dbo.Detail NewParent ON NewParent.parent_id = OldChild.parent_ID WHERE NewChild.master_id = @NewMaster_ID AND NewParent.master_id = @NewMaster_ID AND OldChild.master_id = @OldMaster_ID
诀窍是在初始插入中将旧的" detail_id"用作新的" parent_id"。然后使用这种关系重新连接到旧的一组行,并更新新的parent_id
值。
我假设detail_id
是一个IDENTITY值。如果我们自己分配它们,则需要提供详细信息,但是有一个类似的解决方案。