代码之家  ›  专栏  ›  技术社区  ›  DanDan

当行有子行时复制数据库中的行

  •  2
  • DanDan  · 技术社区  · 14 年前

    我需要复制一个表中的一行,同时也要复制其他表中通过外键链接到它的所有行。然后复制所有链接到这些行的行。

    问题是,当我复制一行时,键会改变。如何通过表之间的关系传播这些更改?

    3 回复  |  直到 14 年前
        1
  •  1
  •   wadesworld    14 年前

    您可以编写一个实现所有复制逻辑的存储过程。

    1. 在主表中插入复制行- 在变量中存储新ID
    2. 子表中每行的副本,
    3. 在依赖于子表的表中插入新行,引用变量2中的FK。

    简而言之,编写一个存储过程,从顶部开始,根据需要遍历任意多个表。

        2
  •  1
  •   Tobiasopdenbrouw    14 年前

    有点“黑客”,但我经常添加一列“copy\u of\u id”,这样我就可以存储旧的id,然后为新创建的值复制相关表中的所有行。

    当然,您也可以为此使用helper表。包含旧ID列和新ID列。不会污染你的主桌。

        3
  •  0
  •   Danny T.    14 年前

    然后可以使用它们来创建“子行”,例如

    INSERT INTO parent_table (parent_field1, parentfield2) VALUES('Some stuff', 'Other stuff');
    
    INSERT INTO child_table (parent_id, other_field) VALUES(SCOPE_IDENTITY(), 'Etc.')
    

    @@IDENTITY SCOPE_IDENTITY() 代码示例。