关于sql server:清除表中的所有行,将身份规范重置为零并且不影响外键?

Clear all the rows in a table resetting the identity specification back to zero and without affecting the foreign keys?

我们已经创建了具有所有关系和依赖关系的数据库框架。 但是在表格内部只是虚拟数据,我们需要摆脱这些虚拟数据,并开始添加正确的数据。 我们如何清除所有内容并将主键(IsIdentity:yes)保留为零,并且不会影响外表关系结构。

非常感谢!


您可以执行以下步骤:

1
2
3
4
5
6
7
8
-- disable all foreign key constraints
EXEC sp_msforeachtable"ALTER TABLE ? NOCHECK CONSTRAINT all"

-- delete data in all tables
EXEC sp_MSForEachTable"DELETE FROM ?"

-- enable all constraints
exec sp_msforeachtable"ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"

有关禁用约束和触发器的更多信息

如果某些表具有标识列,我们可能需要重新设置它们

1
EXEC sp_MSforeachtable"DBCC CHECKIDENT ( '?', RESEED, 0)"

请注意,RESEED的行为在全新表和之前从BOL插入了一些日期的表之间有所不同:

DBCC CHECKIDENT ('table_name', RESEED, newReseedValue)

The current identity value is set to
the newReseedValue. If no rows have
been inserted to the table since it
was created, the first row inserted
after executing DBCC CHECKIDENT will
use newReseedValue as the identity.
Otherwise, the next row inserted will
use newReseedValue + 1. If the value
of newReseedValue is less than the
maximum value in the identity column,
error message 2627 will be generated
on subsequent references to the table.


我用TRUNCATE:

1
2
-- Truncate table (very fast, and it resets Identity as well)
EXEC sp_MSForEachTable"TRUNCATE TABLE ?"

当然,如kristof所建议的那样,也禁用并重新启用检查约束。


使用数据库发布向导生成仅数据库模式的sql文件,并启用该选项以删除表(如果存在)。 在您的数据库上运行此脚本,这将刷新所有内容并根据需要为您提供新的架构。


补种:

DBCC CHECKIDENT(yourtable,reseed,1)

用于将主键设置为1

从表中删除应删除数据,但不影响任何其他事情。