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

时间:2010-08-16 19:38:55

标签: sql-server

我正在使用Microsoft SQL Server 2005,而且一般来说它对SQL来说相对较新。

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

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

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

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

并收到以下错误:

  

'fk_gr_res_resources'不是约束。无法删除约束。查看以前的错误。

我很困惑,因为它是一个约束,并且没有拼写错误。我打算不正确地删除这个吗?我是否从不正确的表中删除约束?任何建议将不胜感激,&请不要激怒我:毕竟我是SQL新手。

1 个答案:

答案 0 :(得分:25)

您收到此错误:

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>

感谢您纠正我的OMG小马!