truncate命令因外部约束而无效,但在使用设计器模式时有效

时间:2012-09-14 07:09:30

标签: sql sql-server sql-server-2008

我正在使用Sql Server Management Studio 2008。

当我尝试使用以下命令截断表时

truncate table MyTable

它给我一个错误说

  
    

无法截断表'dbo.MyTable',因为它正被FOREIGN KEY约束引用。

  

我知道我在这张表中有一个foriegn Key。

现在,当我执行以下操作时

  • 右键单击表格并选择Edit Top 200 Rows
  • 对表中的任何记录都是正确的
  • 并点击Delete,它会被删除。

enter image description here

我对此行为感到困惑,请有人告诉我这是怎么回事以及为什么会这样,我如何使用truncate语句删除。

由于

1 个答案:

答案 0 :(得分:1)

基本上是因为DELETETRUNCATE

之间存在差异

如果你能做到这一点,即使简单的删除也适用于那些记录。 (如果没有对它们的引用,或者在引用MyTable的另一个表上声明ON DELETE语句的话)

DELETE FROM dbo.MyTable

使用TRUNCATE你无法做到这一点。它超过DELETE。您必须先删除CONSTRAINT,然后才能进行截断。在forign_key引用的表上不允许使用Truncate。

例如,另一个区别是Truncate命令也会重新列出IDENTITY列,但DELETE不会。

这是一篇很好的文章:

The difference in TRUNCATE and DELETE in Sql Server