关于sql server 2005:当外键引用表时,截断表的等效效果是什么

What is the equivalent effect to Truncating a table, when the table is referenced by a foreign-key

直接从Sql Server 2005的MSDN文档:

You cannot use TRUNCATE TABLE on tables that:

  • Are referenced by a FOREIGN KEY constraint.
  • Participate in an indexed view.
  • Are published by using transactional replication or merge replication.

我想要TRUNCATE的效果(特别是它重置IDENTITY类型列的事实),但我不能在我的情况下使用一个因为我的表被数据库中其他地方的外键引用。

更新:这是针对我正在清除引用表的测试配置,因此外键完整性不是问题。

还有什么方法可以解决这个问题?


它是由外键引用的事实是你不需要截断表或你将创建孤立记录的线索。这就是存在外键时不允许截断表的原因。

正确的过程是首先删除引用的记录(如果有),然后删除FK约束,然后截断表,然后恢复fk约束。如果跳过第一步,您将创建一个数据完整性恶梦,其中指向oldid 100的记录未指向恰好分配给100的新记录,并且它不是应该匹配的记录。


您可以删除所有行,然后执行DBCC CHECKIDENT(Tablename,RESEED,0)以重置标识种子

但是,DELETE完全记录,而TRUNCATE记录最少,速度要快很多倍

另一种选择是删除外键约束,然后执行截断,然后重新创建外键约束


您将需要删除约束,截断表,然后再添加约束。但是,你应该非常小心。如果表中有行正在删除FK引用,则在删除这些行或清除另一个表中的FK列之前,将无法添加它。


您可以删除外键,截断表,然后重新创建外键。