Truncate all tables of a database in SQL Server 2005
如何截断数据库的所有表?
我用脚本
1 2 3 4
| EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
EXEC sp_MSForEachTable 'DELETE FROM ?'
EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
GO |
为什么要截断所有表? 如果您想要一个空数据库,为什么不运行数据库的CREATE脚本?
如果要截断外键引用的表,则必须先删除FK约束。 在最近的SQL Server版本中,禁用约束是不可能的。
-
我是一个程序员,我输入许多信息到表格进行测试。表格有自动增量字段。我想截断表格再次从0开始增量。
-
给我一个解决方案,从0重置所有表的自动增量(当它为空时)
-
最好的方法是删除数据库并使用应用程序的create database脚本创建数据库。这样您还可以测试应用程序的create database脚本。但您可以使用EXEC sp_MSforeachtable @ command1 ="EXEC DBCC CHECKIDENT('?')"重置所有表中的所有indentity列。
你可以看到这篇文章:how-do-you-trunc-all-tables-in-a-database-using-tsql
-
我收到此错误:无法截断表'dbo.TBL#EstenadeGhanooni',因为它正被FOREIGN KEY约束引用。执行此代码后:EXEC sp_MSForEachTable'TRUNCATE TABLE?' - 禁用所有约束EXEC sp_MSForEachTable"ALTER TABLE?NOCHECK CONSTRAINT all" - 删除所有表中的数据EXEC sp_MSForEachTable"DELETE FROM?" - 启用所有约束EXEC sp_MSForEachTable"ALTER TABLE?WITH CHECK CHECK CONSTRAINT all" - EXEC sp_MSforeachtable"DBCC CHECKIDENT('?',RESEED,0)"有什么问题?
-
没有丢弃FK就无法做到这一点。尽管这个答案表明通过NOCHECK CONSTRAINT ALL禁用参照完整性是可能的。允许这一点的请求已被关闭为"Wont Fix",因此不会很快到来。上面链接的答案链接到一篇文章,其中包含可能通过删除和重新创建FK而起作用的脚本。
-
给我一个解决方案,从0重置所有表的自动增量(当它为空时)
重置自动增量? 我不确定你是否正确理解它是如何工作的。
主键递增由SQL Server使用IDENTITY规范处理。 如果您的表中没有数据,它将始终从0开始。
如果我是你,我会去浏览你的编程书籍并获取一些基本的数据库知识,因为它听起来你在那里遗漏了一些基本的事实。
-
这是不正确的。主键不一定必须是IDENTITY列。此外,如您所述,IDENTITY列并不总是从0开始。它将从指定的种子值开始。