不能截断表

时间:2013-04-10 09:30:23

标签: sql sql-server-2008 truncate

当我尝试截断表时,我收到错误消息如下,

**Cannot truncate table 'Locations' because it is being referenced by a FOREIGN KEY constraint.**

我不知道对此的查询..任何人帮助我。

2 个答案:

答案 0 :(得分:1)

<强>为什么吗

原因是TRUNCATE在没有单独检查的情况下删除了所有记录。

因此,DELETE FROM Locations将删除每条记录(这是记录在事务日志中的记录),检查没有违反任何约束。

TRUNCATE TABLE位置不会这样做。执行(并记录)单个截断操作,这就是更快的原因。

有关详细信息,请参阅this article

解决方法

最简单的方法是删除而不是截断。但是如果这有很长的执行时间,并且可以安全地删除约束,那么您可能希望编写一个脚本来删除约束,截断表,创建约束。

答案 1 :(得分:1)

有一点需要注意 - 当您截断标识列时会重置。当你删除它不。因此,如果您执行删除操作并且最后一个值为242,则下一个值将为243。

执行截断的唯一方法是删除关系。就个人而言 - 我只是删除而不是删除所有关系,然后将它们放回去。