如何重置Sql Server 2008数据库?

9

我想重置我的SQL Server 2008数据库,就像第一次创建时一样。所有的ID必须被重置。数据库中的所有数据都必须清除。有没有办法实现这个目标?

4个回答

5
您可以编写一个脚本来删除表中的所有数据并重置标识值(使用DBCC CHECKIDENT)。有很多这样的脚本,所以我不会重复发明轮子 - 这里有一个例子
一旦您拥有了一个干净的数据库,我建议您备份它 - 然后每次想要重新设置为干净状态时,只需从备份中还原即可。
此外,我建议您保留数据库的完整创建脚本。那将提供另一种选择 - 删除数据库,并从这些脚本中重新创建。

1

重新生成

在所有数据表上使用这对语句。不要忘记留下查找表(例如某些类型)不变。它们可能应该保持填充状态,因为其他数据表依赖于它们的值。

truncate table table_name;
dbcc checkident (table_name, reseed, 0); /* next ID will be 1 */

开发建议

我建议在您开发应用程序时(如果您在stackoverflow上提问的目的是进行开发),同时对数据库脚本进行版本控制。我通常会定义以下这些数据库脚本:

  1. 删除数据库
  2. 创建模型
  3. 创建函数
  4. 创建存储过程
  5. 创建静态数据(查找表数据)
  6. 创建测试数据

按照同样的顺序逐个运行,我总是可以重新创建我的数据库以及测试数据。当我需要部署我的数据库时,只需运行1到5号脚本,不包括第6号脚本。您还可以通过创建一个调用sqlcmd命令的bat文件来实现自动化。您可以轻松地从Visual Studio中运行批处理文件。


当您没有外键时,截断表是一个不错的解决方案。否则,您必须使用DELETE FROM。 - TTRider

1

AdaTheDev的链接对我来说不太适用,但它确实让我找到了正确的方向。

以下是最终适用于我的方法。在删除之前,我必须添加SET QUOTED_IDENTIFIER ON语句。

/*Disable Constraints & Triggers*/
exec sp_MSforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
exec sp_MSforeachtable 'ALTER TABLE ? DISABLE TRIGGER ALL'

/*Perform delete operation on all table for cleanup*/
exec sp_MSforeachtable 'SET QUOTED_IDENTIFIER ON; DELETE ?'

/*Enable Constraints & Triggers again*/
exec sp_MSforeachtable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
exec sp_MSforeachtable 'ALTER TABLE ? ENABLE TRIGGER ALL'

/*Reset Identity on tables with identity column*/
exec sp_MSforeachtable 'IF OBJECTPROPERTY(OBJECT_ID(''?''), ''TableHasIdentity'') = 1 BEGIN DBCC CHECKIDENT (''?'',RESEED,0) END'

1

如果您在谈论您的服务器,那么您可以重建系统数据库链接文本

否则,最简单的方法是恢复您应该在开始时备份的数据(adathedev的回答很好)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接