清理SQL数据库中的所有记录

时间:2009-01-21 15:02:17

标签: database tsql

我想知道在投入生产之前,您将使用什么来清理所有测试数据的数据库(保持结构完好无损)?

我用的是:

-- disable referential integrity
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
GO

EXEC sp_MSForEachTable '
 IF OBJECTPROPERTY(object_id(''?''), ''TableHasForeignRef'') = 1
  DELETE FROM ?'
DBCC CHECKIDENT (''?'', RESEED, 0)
GO

-- enable referential integrity again
EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
GO

我认为我在某个地方上网了,然而,似乎并不总是把所有东西都重新归零。

5 个答案:

答案 0 :(得分:3)

常见的方法是使用一个设置脚本来删除所有表,然后重新创建它们。这样做的好处就是擦除持久存在任何变化的数据。

答案 1 :(得分:2)

我通常从开发人员数据库生成DDL语句,然后在生产服务器上从头开始创建数据库。

答案 2 :(得分:1)

我们保留脚本以在版本控制中构建数据库。当我们需要清除测试数据时,我们删除数据库并重新创建它。另一种选择是恢复处于所需状态的备份。

答案 3 :(得分:1)

我会为你需要擦除的表创建创建/删除脚本,然后将它们擦除并重新创建它们。

答案 4 :(得分:1)

要重新设定您的标识列,您可以将以下行添加到重置脚本中。

EXEC sp_MSForEachTable 'DBCC CHECKIDENT('?', RESEED, 0)'

您可以将命令中的0更改为默认值。