【问题标题】:What can I do about a SQL Server ghost FK constraint?我可以对 SQL Server ghost FK 约束做些什么?
【发布时间】:2010-04-09 19:32:46
【问题描述】:

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

以下是我正在处理的查询:

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". 

试图删除它会给我一个消息,它不存在。有什么想法吗?

【问题讨论】:

    标签: sql sql-server constraints


    【解决方案1】:

    表示创建FK时数据错误

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

    你可以使用ALTER TABLE ...WITH NOCHECK ADD CONSTRAINT...,但是FK没用

    【讨论】:

    • 没错。该消息是关于刚刚添加并且现在正在验证的约束 INDIVIDUAL_EMP_FK。验证失败,隐式事务回滚,新增约束消失。
    • 是的,就是这样。是关于我试图添加的 FK 的错误消息让我失望了。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 2019-06-21
    相关资源
    最近更新 更多