我正在使用Microsoft sql Server 2005,而且通常比较新的sql.
数据库“信息”中的两个表“资源”和“组合资源”之间有一个关系.资源在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.
解决方法
你得到这个错误:
Msg 3728,Level 16,State 1,Line 1 'fk_gr_res_resources' is not a constraint. Msg 3727,State 0,Line 1 Could not drop constraint. See prevIoUs errors.
因为FK约束不存在!
你确定信息是正确的模式名称,而不是dbo?
该sql将证明FK不存在:
SELECT * FROM sysobjects WHERE name = 'fk_gr_res_resources'
哎呀,我原来的答案是错误的,下面是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小马!