关于SQL Server ghost FK约束,我该怎么办?

时间:2010-04-09 19:32:46

标签: sql sql-server constraints

我在使用SQL Server 2005数据库时遇到了一些麻烦,似乎它正在保持一个鬼约束。我有一个脚本可以删除有问题的约束,做一些工作,然后重新添加相同的约束。通常,它工作正常。但是,现在它无法重新添加约束,因为数据库表明它已经存在,即使丢弃工作正常!

以下是我正在使用的查询:

alter table individual drop constraint INDIVIDUAL_EMP_FK

ALTER TABLE INDIVIDUAL
   ADD CONSTRAINT INDIVIDUAL_EMP_FK
          FOREIGN KEY (EMPLOYEE_ID)
                         REFERENCES EMPLOYEE

删除约束后,我通过使用以下查询确保对象真的消失了:

select object_id('INDIVIDUAL_EMP_FK')
select * from sys.foreign_keys where name like 'individual%'

两者都没有返回结果(或null),但当我尝试再次添加查询时,我得到:

The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "INDIVIDUAL_EMP_FK". 

尝试删除它会得到一条消息,表明它不存在。有什么想法吗?

1 个答案:

答案 0 :(得分:4)

这意味着创建FK时数据错误

也就是说,您在INDIVIDUAL子表中具有父EMPLOYEE表中不存在的“EMPLOYEE_ID”值。

您可以使用ALTER TABLE ...WITH NOCHECK ADD CONSTRAINT...但是FK没有用