我有一个数据库的测试环境,我想在测试周期开始时用新数据重新加载该数据库。我对重建整个数据库不感兴趣——只是简单地“重新设置”数据。

使用TSQL从所有表中删除所有数据的最佳方法是什么?是否有可以使用的系统存储过程、视图等?我不想为每个表手动创建和维护截断表语句-我更希望它是动态的。


当前回答

制作一个空的“模板”数据库,进行完全备份。当您需要刷新时,只需使用WITH REPLACE恢复。快速,简单,防弹。如果这里或那里的几个表需要一些基本数据(例如。配置信息,或让你的应用程序运行的基本信息),它也会处理这些。

其他回答

我喜欢在MSSQL Server developer或Enterprise中使用的另一个选项是在创建空模式后立即创建数据库快照。此时,您可以继续将数据库恢复到快照。

这是一种方法……可能还有其他10种更好/更有效的方法,但这听起来似乎很少有人这样做,所以下面是……

从sysobjects中获取一个表列表,然后用游标遍历这些表,为每次迭代调用sp_execsql('truncate table ' + @table_name)。

对于SQL 2005,

EXEC sp_MSForEachTable 'TRUNCATE TABLE ?'

2000年和2005/2008年的链接更多。

只有当你的表之间没有任何外键关系时,才能截断所有的表,因为SQL Server不允许你用外键截断一个表。

另一种方法是先确定有外键的表并删除它们,然后再截断没有外键的表。

详见http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=65341和http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=72957。

虽然有点晚了,但也许能帮到别人。 我有时会创建一个过程,使用T-SQL执行以下操作:

将所有约束存储在临时表中 删除所有约束 除某些不需要截断的表外,截断所有表 重新创建所有约束。

我已经把它列在我的博客上了