我正在使用Sql Server Management Studio 2008。
当我尝试使用以下命令截断表时
truncate table MyTable
它给我一个错误说
无法截断表'dbo.MyTable',因为它正被FOREIGN KEY约束引用。
我知道我在这张表中有一个foriegn Key。
现在,当我执行以下操作时
Edit Top 200 Rows
Delete
,它会被删除。
我对此行为感到困惑,请有人告诉我这是怎么回事以及为什么会这样,我如何使用truncate语句删除。
由于
答案 0 :(得分:1)
基本上是因为DELETE
和TRUNCATE
如果你能做到这一点,即使简单的删除也适用于那些记录。 (如果没有对它们的引用,或者在引用MyTable的另一个表上声明ON DELETE
语句的话)
DELETE FROM dbo.MyTable
使用TRUNCATE
你无法做到这一点。它超过DELETE
。您必须先删除CONSTRAINT
,然后才能进行截断。在forign_key引用的表上不允许使用Truncate。
例如,另一个区别是Truncate命令也会重新列出IDENTITY
列,但DELETE
不会。
这是一篇很好的文章: