由于外键无法删除表

Posted

技术标签:

【中文标题】由于外键无法删除表【英文标题】:Cannot drop a table because of foreign keys 【发布时间】:2015-11-28 16:56:09 【问题描述】:

我已经尝试解决这个问题几个小时了,但我不知道是什么原因造成的。我正在尝试在 MSSQL Server 中删除表(我需要从头开始)以及每当我使用该语句时

DROP TABLE dbo.Manages;

我收到这条消息:

无法删除对象“dbo.Manages”,因为它被 FOREIGN KEY 约束。

问题是,我还剩下三个表,它们都包含外键(它们相互链接)。事实证明,我也无法删除,我被卡住了。我尝试先删除外键,但是

ALTER TABLE dbo.Manages DROP FOREIGN KEY Mgr_start_date;

行不通。我知道还有一种方法可以这样写:

ALTER TABLE dbo.Manages
DROP FOREIGN KEY fk_(...)

然而当我创建外键时,我并没有使用 fk_,我只是简单地陈述了

ALTER TABLE dbo.Department
    ADD FOREIGN KEY (Mgr_start_date)
    REFERENCES dbo.Manages(Mgr_start_date);

任何帮助将不胜感激。我对 SQL 很陌生,但我真的很想完成这项工作。我尝试了这个论坛的一些解决方案,比如使用FOREIGN_KEY_CHECKS = 0,然后将其设置为 1,但它也不起作用。

【问题讨论】:

您必须在要删除的子表上设置 ON DELETE CASCADE。 如果您需要从头开始,删除和创建数据库会更简单。 【参考方案1】:

您可以使用 GUI 删除外键。 在表文件夹的 Management Studio 中,您可以在 Key 文件夹中找到您的外键。 或使用EXEC sp_fkeys 'Your Table' 查找外键的名称。

【讨论】:

【参考方案2】:

其实,我想我终于成功了。我右键单击我的特定数据库并选择“设计”,然后在属性下的下拉菜单中找到外键的名称。这样我就能够找到程序设置的外键的名称,并正常删除它们。工作正常,数据库已清理。非常感谢您的建议!

【讨论】:

以上是关于由于外键无法删除表的主要内容,如果未能解决你的问题,请参考以下文章

无法删除表:外键约束失败

删除表A中的一列 出错 提示有外键关系无法删除 如何解决?

在 HSQLDB 上使用 Spring DBUnit 进行休眠和 Spring 数据 - 由于外键约束而无法删除

由于外键 phpMyAdmin 的约束,BigDump 无法导入

原因:java.sql.SQLException:无法删除表“投票”上的外键约束“FK336ctjyksuuwnpmffcogcdyet”引用的表“链接”

如何解决这个问题 - 无法删除或更新父行:外键约束失败