我想重置我的SQL Server 2008数据库,就像第一次创建时一样。所有的ID必须被重置。数据库中的所有数据都必须清除。有没有办法实现这个目标?
我想重置我的SQL Server 2008数据库,就像第一次创建时一样。所有的ID必须被重置。数据库中的所有数据都必须清除。有没有办法实现这个目标?
在所有数据表上使用这对语句。不要忘记留下查找表(例如某些类型)不变。它们可能应该保持填充状态,因为其他数据表依赖于它们的值。
truncate table table_name;
dbcc checkident (table_name, reseed, 0); /* next ID will be 1 */
我建议在您开发应用程序时(如果您在stackoverflow上提问的目的是进行开发),同时对数据库脚本进行版本控制。我通常会定义以下这些数据库脚本:
按照同样的顺序逐个运行,我总是可以重新创建我的数据库以及测试数据。当我需要部署我的数据库时,只需运行1到5号脚本,不包括第6号脚本。您还可以通过创建一个调用sqlcmd命令的bat文件来实现自动化。您可以轻松地从Visual Studio中运行批处理文件。
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'