我需要在表中复制一行,并复制通过其他表中的外键链接到它的所有行。然后复制链接到这些行的所有行。
问题是当我复制该行时,密钥将会改变。如何通过表之间的关系传播这些更改?
答案 0 :(得分:1)
有点像'hack',但我经常添加一个列'copy_of_id',这样我就可以存储旧的id,然后复制依赖表中所有行的新创建的值。
它不漂亮,但具有优势(例如,人类可追踪的事情)。
当然,您也可以使用辅助表。包含旧ID和新ID列。这不会污染你的主表。
答案 1 :(得分:1)
您可以编写一个实现所有复制逻辑的存储过程。
本质:
简而言之,编写一个从顶部开始的存储过程,并根据需要向下走多个表。
答案 2 :(得分:0)
创建新的“父行”时,@@ IDENTITY和SCOPE_IDENTITY()将包含新标头的ID。
然后您可以使用它们来创建“子行”,例如
INSERT INTO parent_table (parent_field1, parentfield2) VALUES('Some stuff', 'Other stuff');
INSERT INTO child_table (parent_id, other_field) VALUES(SCOPE_IDENTITY(), 'Etc.')
在MSDN上查看@@IDENTITY和SCOPE_IDENTITY()代码示例。