Почему не следует нарушать внешний ключ при включении? - PullRequest
2 голосов
/ 18 января 2012

Почему не следует нарушать внешний ключ при включении в SQL Server?

У нас есть две таблицы, Order Header и Order Detail.

Order header таблицы OrderID ссылки на столбцы OrderDetail таблицы OrderID столбцы.

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

После вставки данных столбец OrderID таблицы сведений о заказе содержит значения 101,102,103, а столбец Order ID таблицы заголовка заказа содержит только 100.

Затем я пытаюсь включить ограничение внешнего ключа, используя следующий код t-sql

exec sp_msforeachtable "ALTER TABLE ? CHECK CONSTRAINT ALL"

Почему не следует нарушать внешний ключ с существующими данными при включении?

1 Ответ

3 голосов
/ 18 января 2012

При перемещении данных из нескольких таблиц, которые связаны с FKey - вы должны:

  • или сохранить значения ключей в обеих таблицах
  • или выдать новые значения, меняющие соответствующий столбец FKey в ссылочной таблице при перемещении

При включении ограничения FKey - по умолчанию проверяется согласованность данных

...