当外键引用表时,截断表的等效效果是什么

时间:2010-02-05 19:32:46

标签: sql-server-2005 foreign-keys identity truncate

直接离开MSDN docs for Sql Server 2005

  

您不能在以下表格上使用TRUNCATE TABLE:

      
  • 由FOREIGN KEY约束引用。
  •   
  • 参与索引视图。
  •   
  • 使用事务复制或合并复制发布。
  •   

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

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

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

4 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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