外键约束引发错误但已停用

Foreign key constraint raises error but it is deactivated

编辑我的问题被错误地标记为重复。这是关于 t运行 不可能对表进行约束,而不仅仅是禁用约束,根据 Larnu 的说法,这是不可能的,因为我需要删除它们。

我必须清空数据库然后收缩它。我已经 运行

delete from 在所有表中 (exec sp_MSforeachtable 'delete from ?')。

下一步是使用

禁用所有约束

alter table tableName nocheck constraint all (exec sp_MSforeachtable 'alter table ? nocheck constraint all')

并检查它们是否确实被禁用:

select
     [Table]     = o2.name, 
     [Constraint] = o.name, 
     [Enabled]   = case when ((C.Status & 0x4000)) = 0 then 1 else 0 end
from sys.sysconstraints C
     inner join sys.sysobjects o on  o.id = c.constid and o.xtype='F'
     inner join sys.sysobjects o2 on o2.id = o.parent_obj

即便如此,我仍然得到错误:

Msg 4712, Level 16, State 1, Line 5
Cannot truncate table '...' because it is being referenced by a FOREIGN KEY constraint.

我在这里错过了什么?

谢谢。

为了能够解决这个问题,我按照@Larnu在评论部分指出的做了:

"The correct methodology would be DROP FOREIGN KEY -> TRUNCATE TABLE ->CREATE FOREIGN KEY".

因此,第 1 次删除所有约束:

USE DATABASE;

DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql += N'
ALTER TABLE [DATABASE].' + QUOTENAME(OBJECT_SCHEMA_NAME(parent_object_id))
    + '.' + QUOTENAME(OBJECT_NAME(parent_object_id)) + 
    ' DROP CONSTRAINT ' + QUOTENAME(name) + ';'
FROM sys.foreign_keys;

EXEC sp_executesql @sql;

和第二次截断表格:

exec sp_MSforeachtable 'truncate table ?'

我没有重新创建 F.keys,因为 DB 可能不会再被使用了。