4

我正在使用 Sql Server Management Studio 2008。

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

truncate table MyTable

它给了我一个错误说

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

我知道我在这张表中有一个外键。

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

  • 右键单击表格并选择Edit Top 200 Rows
  • 就在表中的任何记录上
  • 并点击Delete,它会被删除。

在此处输入图像描述

我对这种行为感到困惑,请有人告诉我这是如何发生的以及为什么会发生,以及如何使用 truncate 语句删除。

谢谢

4

1 回答 1

2

DELETE基本上是因为和之间有区别TRUNCATE

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

DELETE FROM dbo.MyTable

有了TRUNCATE你就无法做到这一点。它比一个DELETE. 您必须先删除第CONSTRAINT一个,然后才能进行截断。在由 forign_key 引用的表上不允许截断。

例如,另一个不同之处是,截断命令也会重新插入IDENTITY列,但DELETE不是。

这是一篇关于它的好文章:

SQL Server中TRUNCATE和DELETE的区别

于 2012-09-14T07:23:35.277 回答