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 ALL
SP 开始时的调用。我想知道在这种情况下是否可以抑制重新编译。