Sql server 2005 t sql复制级联表中的行
在这种情况下,我有几个相关/级联表。假设所有的1对多关系都沿着表1、表2、表3、表4等层叠而下。我拥有的是表中的默认行。它们从表1中的一条记录开始,在其他表中有一条或多条相关记录 我要寻找的是一种简单的方法来复制行,并为每个行创建/维护新的主键。通过维护,我的意思是,table1.ID1是复制的,因此现在有了table1.ID2,所有其他列都是相同的,只有ID发生了更改 最重要的是,它在所有其他表中的所有相关行都被复制,并且外键/主键都指向新的 因此,table2的外键为table1.ID2,主键为table2.ID#,table2行中的其余列与表2中复制的行相同 我很懒,试图摆脱管理ID和创建一个很长的存储过程Sql server 2005 t sql复制级联表中的行,sql-server-2005,tsql,Sql Server 2005,Tsql,在这种情况下,我有几个相关/级联表。假设所有的1对多关系都沿着表1、表2、表3、表4等层叠而下。我拥有的是表中的默认行。它们从表1中的一条记录开始,在其他表中有一条或多条相关记录 我要寻找的是一种简单的方法来复制行,并为每个行创建/维护新的主键。通过维护,我的意思是,table1.ID1是复制的,因此现在有了table1.ID2,所有其他列都是相同的,只有ID发生了更改 最重要的是,它在所有其他表中的所有相关行都被复制,并且外键/主键都指向新的 因此,table2的外键为table1.ID2,主
我认为这是不可能的,但我希望我错了。提前感谢。最近我们的一个项目中有一些功能需要这样做 我们最终使用递归存储过程来完成它。每次通话需要两条信息:
- 复制记录的表的名称
- 要复制的表的父表的主键
Function deep_copy (table, parent)
For each record in table whose parent is parent
Create a new PK and copy this record
For each subtable of table
Call self with parameters (subtable, newPK)
您可以调用deep\u copy
对要复制的每个记录进行复制。然后,deep_copy
将调用B中需要复制的记录,以及B的任何其他同级表。问题是您需要元信息来知道B是a的子表。我们碰巧已经存储了该元信息,因此不必做任何特殊的操作来获取它
它最终不是一个很大的存储过程。如果您的PK都是identity列,那么这会使整个过程变得简单很多。不过,它的分支非常多。这不完全是一个有效的算法。但是,这又是一个内在的复杂问题,关系数据模型的设计并不能很好地处理这个问题。触发器正是为此而创建的。然而,好的触发器很难编写,也很难维护。但是,如果您正确地理解了它们,那么很容易实现您描述的场景