Что я могу сделать с ограничением «Призрачный FK» в SQL Server? - PullRequest
3 голосов
/ 09 апреля 2010

У меня возникли некоторые проблемы с базой данных 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%'

Оба не возвращают результатов (или ноль), но когда я пытаюсь снова добавить запрос, я получаю:

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

Пытаясь отбросить это, я получаю сообщение, что его не существует. Есть идеи?

1 Ответ

4 голосов
/ 09 апреля 2010

Это означает, что данные неверны при создании FK

То есть в дочерней таблице INDIVIDUAL есть значения "EMPLOYEE_ID", которых нет в родительской таблице EMPLOYEE.

Вы можете использовать ALTER TABLE ...WITH NOCHECK ADD CONSTRAINT..., но тогда ФК бесполезен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...