如果不能使用 RESTORE,重置 SQL Server 数据库的最快方法是什么?

And*_*kin 7 sql-server-2008 sql-server

我有需要测试数据库才能运行的集成测试。
由于测试通常应该是独立的,所以我在每次测试开始时重置数据库。

我无法使用RESTORE,因为架构的某些部分(我无法控制)正在缓存连接,并且会在下次调用时因连接丢失而失败。

现在我正在创建一个快照,然后在每个表上调用DELETE+INSERT以将数据与快照同步。但是,每次重置需要 1 秒,这太多了(150 次测试 = 150 秒)。我有很多桌子,但它们几乎是空的,所以没有理由让它这么慢。

那么如何在不丢失连接的情况下在不到 1 秒的时间内用以前的版本替换数据库呢?

我的下一个想法是添加某种更改跟踪,因为每个测试只影响一些表,但这会使重置代码更加复杂。

更新:我添加了SET STATISTICS TIME ON,我得到了

SQL Server parse and compile time: 
   CPU time = 327 ms, elapsed time = 343 ms.
Run Code Online (Sandbox Code Playgroud)

对于我的重置 SP。我认为这是由于ALTER TABLE ... NOCHECK CONSTRAINT ALLSP 开始时的调用。我想知道在这种情况下是否可以抑制重新编译。

Mic*_*son 5

在单个事务中运行每个测试......在每个测试结束时,ROLLBACK事务。


小智 1

使用 SSIS 包执行 sp 删除每个表中的所有行,然后从快照源恢复它们?