Можно ли удалить из 2 или более таблиц SQL с помощью источника данных SQL? - PullRequest
1 голос
/ 06 апреля 2009

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

Я получаю эту ошибку:

Оператор DELETE конфликтует с ограничением REFERENCE "FK_Availability_Fixture". Конфликт произошел в базе данных «Регби», таблице «dbo.Availability», столбце «FixtureId». Заявление было прекращено. Описание: во время выполнения текущего веб-запроса произошло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении: System.Data.SqlClient.SqlException: инструкция DELETE конфликтует с ограничением REFERENCE "FK_Availability_Fixture". Конфликт произошел в базе данных «Регби», таблице «dbo.Availability», столбце «FixtureId». Заявление было прекращено.

Ответы [ 3 ]

4 голосов
/ 06 апреля 2009

Вы можете определить свое отношение FK к каскаду при удалении. Это приведет к тому, что оператор удаления будет каскадировать (удалять) все дочерние таблицы.

Проверить страницу с MSDN

0 голосов
/ 06 апреля 2009

Это «должно произойти» для поддержания целостности данных: строка в другой таблице ссылается на строку, которую вы пытаетесь удалить.

Если удаление удастся, ссылка на другую таблицу не будет иметь смысла.

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

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

0 голосов
/ 06 апреля 2009

Ваша база данных говорит: «Не позволяйте столбцу Availability.FixtureID ссылаться на несуществующие значения». Таким образом, удаление строки из таблицы Fixture будет нарушать это, если строка из таблицы Availability ссылается на нее.

Таким образом, у вас есть два варианта, оба одинаково недействительны, но первый, вероятно, то, что вы ищете:

  1. Найдите отношение внешнего ключа с именем FK_Availability_Fixture, а затем включите каскадное удаление в столбце FixtureId.
  2. Вручную удалите строку зависимости в таблице Availability или обновите FixtureID для конкретной рассматриваемой строки, чтобы она ссылалась на другое значение FixtureID.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...