0

直接来自Sql Server 2005 的 MSDN 文档

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

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

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

更新:这是一个测试配置,我也清除了引用表,所以外键完整性不是问题。

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

4

4 回答 4

1

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

但是 DELETE 再次被完全记录,而 TRUNCATE 被最小化记录并且会快很多倍

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

于 2010-02-05T19:37:00.200 回答
1

它被外键引用的事实是您不需要截断表的线索,否则您将创建孤立记录。这就是为什么如果存在外键则不允许截断表的原因。

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

于 2010-02-05T19:42:33.263 回答
0

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

于 2010-02-05T19:37:45.020 回答
0

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

于 2010-02-05T19:40:21.863 回答