Проблемы с добавлением ограничения внешнего ключа в SQL Server? - PullRequest
3 голосов
/ 21 апреля 2011

Я использую SQL Server, и мне нужно добавить внешний ключ в уже существующую таблицу.

Проблема заключается в том, что столбец, который будет действовать как внешний ключ, уже имеет несколько несовместимых значений (которые не встречаются в качестве первичного ключа) в другой таблице.

Мне было интересно, когда я изменю таблицу и добавлю ограничение внешнего ключа, что произойдет со строками в таблице с ограничением внешнего ключа, которое имеет несовместимые значения ??

- Neeraj

Ответы [ 2 ]

2 голосов
/ 21 апреля 2011

В этом случае это ваше решение. Вы можете оставить эти значения в таблице, используя предложение WITH NOCHECK. Но все новые введенные значения будут проверены.

1 голос
/ 21 апреля 2011

Вы получите ошибку, и ничего не будет вставлено.

Чтобы найти все несогласованные строки (предположим, что A и B - это таблицы назначения, A.id - это родительский ключ, а B.fk_id - это дочерний, внешний ключ, идентификатор):

   SELECT B.fk_id
     FROM B
LEFT JOIN A ON A.id = B.fk_id
    WHERE A.id IS NULL

После его выполнения у вас будут все дочерние строки, которые ссылаются на «никуда».Поэтому вам нужно либо удалить их, либо изменить, указав на существующие строки, либо установить B.fk_id в NULL (если нет ограничения NOT NULL).

И после того, как этот запрос вернет 0 строк, выможет безопасно создавать ограничения внешнего ключа без каких-либо магических опций.

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