SQL Server 错误:“%”不是约束。无法删除约束。查看之前的错误

问题描述 投票:0回答:2

我正在使用 Microsoft SQL Server 2005,总体来说对 SQL 还比较陌生。

数据库“Information”中的“Resources”和“Group_Resources”两个表之间存在关系。 资源在 Group_Resources 中有一个外键“id”,名为“resource_id”。 两者之间有一个外键约束“fk_gr_res_resources”。

我被确立为数据库所有者,并拥有完整的读/写/创建/删除权限。

我想删除外键约束,所以我执行了以下查询:

ALTER TABLE [Information].[group_resources] DROP CONSTRAINT fk_gr_res_resources

并收到以下错误:

'fk_gr_res_resources' is not a constraint. Could not drop constraint. See previous errors.

我很困惑,因为它是一个约束,并且没有拼写错误。 我会不恰当地删除这个吗? 我是否从不正确的表中删除约束?

sql-server
2个回答
40
投票

您收到此错误:

Msg 3728, Level 16, State 1, Line 1
'fk_gr_res_resources' is not a constraint.
Msg 3727, Level 16, State 0, Line 1
Could not drop constraint. See previous errors.

因为FK约束不存在!

您确定

Information
是正确的模式名称而不是
dbo
吗?

1。这条SQL将证明FK不存在:

SELECT * FROM sysobjects WHERE name = 'fk_gr_res_resources'

2。哎呀,我原来的答案错了,这是 SQL Server 的正确语法:

ALTER TABLE <table_name>
DROP CONSTRAINT <foreignkey_name>

3.您的数据库示例:

IF EXISTS (SELECT * FROM sysobjects WHERE name = 'fk_gr_res_resources')
BEGIN
  ALTER TABLE Group_Resources
  DROP CONSTRAINT fk_gr_res_resources
END;

4。尝试运行这个:

IF NOT EXISTS (SELECT * FROM sysobjects WHERE name = 'fk_gr_res_resources')
BEGIN
  ALTER TABLE Group_Resources
  ADD CONSTRAINT fk_gr_res_resources
  FOREIGN KEY (resource_id)
  REFERENCES Resources(id) /* make sure Resources.id is a PRIMARY KEY */
END;

5。然后尝试一下,看看是否仍然出现该错误:

ALTER TABLE Group_Resources
DROP CONSTRAINT fk_gr_res_resources

其他语法是针对 MySQL 的,抱歉:

ALTER TABLE <table_name>
DROP FOREIGN KEY <foreignkey_name>

0
投票

我想在这里补充一点,有时您在添加 FK 约束(例如 ALTER TABLE 语句与 FOREIGN KEY 约束冲突)时会遇到问题。冲突发生在数据库,dbname>,表,列 当您尝试删除它时,它将显示上述主题标题中提到的错误。

您可以在当前表中尝试引用的源表中检查此列的值。由于可能加载了一些默认值,当前表可能没有源表中存在的值,如果您可以更改它会按预期工作。

© www.soinside.com 2019 - 2024. All rights reserved.