Sql 使用数据和外键复制数据库,但不插入标识

Sql 使用数据和外键复制数据库,但不插入标识,sql,database,relational-database,sql-server-2012,Sql,Database,Relational Database,Sql Server 2012,情景: 我有一组测试数据需要每天部署到我们的构建服务器(我们的构建服务器数据库首先被当前的实时数据库覆盖,并且删除了一个月前的所有数据) 此测试数据中包含需要保留的外键引用 我不能简单地打开IDENTITY_INSERT,因为主键可能与数据库中已有的数据冲突(因为我们不是从空白数据库开始) 测试数据需要能够相当定期地重新生成,因此每次重新生成数据时,通过部署脚本并将id列捏造成奇怪的东西(例如,一个负数),然后将相关的外键列更改为相同的id,这种想法不会让我感到激动 理想情况下,我想知道是否有一

情景:

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

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

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

测试数据需要能够相当定期地重新生成,因此每次重新生成数据时,通过部署脚本并将id列捏造成奇怪的东西(例如,一个负数),然后将相关的外键列更改为相同的id,这种想法不会让我感到激动

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

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

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

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

听起来您想研究一个处理id变化的ETL过程。当您使用SQL Server时,您可以查看-使用它构建一些临时表,可以将每个主键的“旧”id映射到“新”id,以便在迁移“子”时映射外键表。

您想在这里做什么样的测试?我认为对于一个测试系统,您总是希望使用给定的、已知的数据集来加载它-否则您的测试的预期结果将如何保持最新?为了确保当前的实时数据不会引起任何问题,我们的测试也会扫描这些数据(这就是为什么我们只清除构建服务器上一个月以前的数据). 正如您所说,加载已知数据背后的想法是,我们针对该数据运行的测试将能够断言计数和值是否正确。