Sql server 即使在sql server中禁用FK约束后,也无法截断父表

Sql server 即使在sql server中禁用FK约束后,也无法截断父表,sql-server,tsql,Sql Server,Tsql,我无法仅通过禁用引用表中的FK约束从父表截断。实际上,我必须删除引用表中的约束才能截断父表 首先截断子表之后,我执行了上述步骤……因此我遵循了正确的顺序……我真的需要删除约束,然后批量插入数据,然后重新创建FK约束吗?如果要使用TRUNCATE,那么是的,删除并重新创建约束是唯一的方法 确认(有更多解释) 不能对外键引用的表使用TRUNCATE TABLE 约束;相反,使用 删除不带WHERE子句的语句。因为TRUNCATE表不是 如果已记录,则无法激活触发器 如果子表为空(或所有相关FK值均设

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


首先截断子表之后,我执行了上述步骤……因此我遵循了正确的顺序……我真的需要删除约束,然后批量插入数据,然后重新创建FK约束吗?

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

确认(有更多解释)

不能对外键引用的表使用TRUNCATE TABLE 约束;相反,使用 删除不带WHERE子句的语句。因为TRUNCATE表不是 如果已记录,则无法激活触发器


如果子表为空(或所有相关FK值均设置为
NULL
),则您应该能够
从父表中删除
,而无需禁用或删除约束

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


因此,在您的案例中只需使用
DELETE
。除非你每天做50000次,试图让它与
TRUNCATE
一起工作似乎是一件麻烦事,但收效甚微。

这里有:stackoverflow.com/questions/159038/can-foreign-key-constraints-be-temporary-disabled-using-t-sqlwell…我只需要禁用一个FK约束,而不是全部。ALTER TABLE MyTable NOCHECK约束ALL@user814064不会和你一起工作截断不…引用或子表中的约束禁用仍然不允许我截断父表中的数据。我将在父表上使用DELETE,在子表上使用truncate,并且在此过程中不必禁用任何约束。若要使用DELETE清空表中的所有数据,是否需要先禁用FK约束?@Code12您尝试过吗?复制子表,将原始表重命名为其他表怎么样(例如,使用“BAK”或其他后缀),然后将空副本重命名为原始表的名称,并从父表中截断,以便约束不会干扰?然后当然删除复制的空表并重命名原始表。@Code12是的,但可以删除truncate。旧的,但我认为仍然相关: