-1

我无法通过仅在引用表中禁用 FK 约束来截断父表。我必须实际删除引用表中的约束才能截断父表。

我在第一次截断子表之后做了上述步骤.....所以我确实遵循了正确的顺序....我真的需要删除约束然后批量插入数据然后重新创建 FK 约束吗?

4

2 回答 2

1

如果你想使用TRUNCATE,那么是的,删除并重新创建约束是唯一的方法。

文档中的确认(有更多解释)

您不能在由 FOREIGN KEY 约束引用的表上使用 TRUNCATE TABLE;相反,使用没有 WHERE 子句的 DELETE 语句。因为没有记录 TRUNCATE TABLE,所以它不能激活触发器。

于 2013-09-05T20:29:57.923 回答
0

如果子表为空(或所有相关的 FK 值都设置为NULL),您应该能够在DELETE不禁用或删除约束的情况下从父表中获取。

TRUNCATE但是,即使您禁用约束并且即使子表为空,您也无法使用。在这种情况下,SQL Server 在 DDL 级别检查约束是否存在,并在它检查数据是否违反约束之前很久就退出(因此表为空并不重要)。

所以,只DELETE在你的情况下使用。除非你每天这样做 50,000 次,否则试图让它工作TRUNCATE似乎很麻烦,收效甚微。

于 2013-09-05T20:38:06.510 回答