使用数据和外键复制数据库而不插入标识

时间:2013-04-11 11:49:55

标签: sql database relational-database sql-server-2012

情景:

我有一组需要每天部署到我们的构建服务器的测试数据(我们的构建服务器数据库首先被当前的实时数据库覆盖,并且删除了一个月以上的所有数据)。

此测试数据中包含需要保留的外键引用。

我不能简单地打开IDENTITY_INSERT,因为主键可能与数据库中已有的数据发生冲突(因为我们不是从空白数据库开始)。

测试数据需要能够相当频繁地重新生成,因此虽然通过部署脚本并将id列捏造为异常(或者例如负数),然后更改相关的外键列每次我们重新生成数据都是同一个id不会让我兴奋。

理想情况下,我想知道是否有一个工具可以扫描数据库,获取外键约束并相应地生成插入脚本,如:

INSERT INTO MyTable VALUES('TEST','TEST');

DECLARE @Id INT;
SET @Id = (SELECT @@IDENTITY)

INSERT INTO MyRelatedTable VALUES(@Id,'TEST')

1 个答案:

答案 0 :(得分:0)

听起来你想要研究一个能够应对id变化的ETL过程。在使用SQL Server时,您可以查看OUTPUT clause - 使用它来构建一些临时表,这些表可以将“旧”id映射到每个主键的“new”id以映射外键迁移“子”表时。

相关问题