Почему я не могу обновить эту таблицу? - PullRequest
3 голосов
/ 03 декабря 2010

У меня есть три таблицы в SQL Server 2008 R2: Country Address и Country_Address


Country имеет столбцы:

CountryID Country

1, Афганистан

2, Австралия


Address имеет столбцы:

AddressID Address

1, 5 Smith Way


Country_Address имеет столбцы:

CountryID AddressID

1, 1

edit : поэтому в примере 5-адрес Смита - это адрес для Афганистана.

Я опустошил таблицы, затем добавил две страны и один адрес, а затем ссылку в Country_Address между 1и 1. Когда я пытаюсь обновить CountryID с 1 до 2, я не могу из-за ограничения FK.Я не понимаю, почему это так, потому что CountryID, который я пытаюсь назначить, существует.Итак, как мне обновить его?


edit1 : эта ошибка появляется при попытке выполнить обновление в SQL Management Studio, я получаю InvalidOperationException -«Модель типа« ... »не может быть обновлена».в Visual Studio.

Строка не обновлена.

Данные в строке 1 не были зафиксированы.Источник ошибки: поставщик данных .Net SqlClient.Сообщение об ошибке: оператор UPDATE конфликтует с ограничением FOREIGN KEY «FK_Country_Address_Address».Конфликт произошел в базе данных «...», таблица «dbo.Address», столбец «AddressID».

Оператор был прерван.

1 Ответ

5 голосов
/ 03 декабря 2010

Проблема заключается в том, что при попытке обновить значение первичного ключа в таблице "Страны" таблица Country_Address будет содержать недопустимую ссылку на таблицу "Страны".

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

Смотрите здесь: http://msdn.microsoft.com/en-us/library/aa933119%28SQL.80%29.aspx


РЕДАКТИРОВАТЬ: Если я, наконец, правильно это понимаю, я думаю, что внешние ключи в Country_Address поменялись местами или, по крайней мере, неправильно в столбце CountryID. Пожалуйста, проверьте определения внешнего ключа.

Выполнение UPDATE Country_Address SET CountryID = 2 должно работать, если все настроено правильно. Сообщение об ошибке, которое появляется при попытке обновления, должно никогда приводить к недопустимому значению в столбце AddressID - это указывает на то, что внешний ключ установлен неправильно.

...