【问题标题】:Cannot truncate table [duplicate]无法截断表[重复]
【发布时间】:2013-04-02 01:38:55
【问题描述】:
当我尝试截断表格时,我收到如下错误消息,
**Cannot truncate table 'Locations' because it is being referenced by a FOREIGN KEY constraint.**
我不知道那个查询..任何人帮助我。
【问题讨论】:
标签:
sql
sql-server-2008
truncate
【解决方案1】:
需要注意的一件事 - 当您截断标识列时会重置。当你删除它不会。因此,如果您执行删除并且最后一个值为 242,则下一个值将是 243。
进行截断的唯一方法是删除关系。就个人而言 - 我只是删除而不是删除所有关系然后将它们放回去。
【解决方案2】:
为什么?
原因是 TRUNCATE 删除了所有记录而没有单独检查。
所以 DELETE FROM Locations 将删除每条记录(这就是记录在事务日志中的内容),检查是否违反了任何约束。
TRUNCATE TABLE Locations 不会这样做。执行(并记录)单个截断操作,这就是它更快的原因。
更多信息请参见this article。
解决方法
最简单的方法是删除而不是截断。但是如果执行时间很长,并且删除约束是安全的,您可能需要编写一个脚本来删除约束、截断表、创建约束。