У меня была такая же проблема.Как сказал Уилл А, управляющая студия сделает следующие шаги для обновления таблицы и ее внешних ключей:
- Создание новой таблицы с именем temp_
- Копирование содержимого из старой таблицы в новую
- Удалить все ограничения, индексы и внешние ключи
- Удалить старую таблицу
- Переименовать новую таблицу в = старая таблица
- Воссоздать внешние ключи, индексы иограничения
У меня могут быть первые 3 в неправильном порядке, но вы поняли идею.В моем случае я потерял целые таблицы, а не только внешние ключи.Лично мне не нравится, как это происходит, поскольку ОЧЕНЬ много времени приходится создавать заново индексы в таблице с большим количеством данных. Если это небольшое изменение, я обычно делаю это самостоятельно в T-SQL.
Просмотрите сценарий изменения перед его выполнением, убедитесь, что он выглядит разумным.
@ OMGPonies, почему вы не можете удалить внешний ключ, если в таблице есть данные?Конечно вы можете.Существуют только ограничения на создание внешних ключей для таблиц с данными, но это только в том случае, если это нарушает ограничение.Однако даже этого можно избежать, используя параметр WITH NOCHECK при создании ключа.Да, я знаю, что он сломается, когда вы попытаетесь обновить неверный набор результатов.