при каскаде удаления удаляется вся дочерняя таблица - PullRequest
0 голосов
/ 12 ноября 2010

У меня есть две таблицы: Parent, которая имеет первичный ключ (parentID) и некоторые другие поля типа varchar (50) и Child, которая выглядит следующим образом:

childID, primary key
parentID, foreign key references Parent (parentID)
otherID, foreign key  to another table
  • Если я удаляюстрока из Child, без проблем.
  • Если я удаляю строку из Parent, я получаю ошибку ограничения внешнего ключа для Child - хорошо, это правильно.

Теперь яизмените отношение для ключа parentID и установите «Удалить» каскадно вместо «Никаких действий» (я использую серверную студию 2008, щелкаю правой кнопкой мыши по столбцу, выбираю «Изменить», затем правой кнопкой мыши на дизайне таблицы и выбираю «Отношения». Затем я выбираюотношения для родительских / дочерних таблиц и откройте раздел «Вставка / обновление спецификации» в «Конструкторе таблиц»)

Если я снова удалю строку из дочернего элемента, проблем не возникнет.Если я удаляю строку из Parent, ВСЕ строки дочерней таблицы удаляются, даже если большинство из них указывают на другие parentID.

Я унаследовал эту БД и все ее таблицы.Есть ли какие-то настройки свойств, которые мне не хватает?Из того, что я прочитал, каскадное удаление должно удалять ТОЛЬКО дочерние строки, которые указывают на один родительский идентификатор, который я удалил из Parent.

Спасибо.

Бен

Ответы [ 2 ]

2 голосов
/ 12 ноября 2010

Правильно, удаление должно удалять только строки, относящиеся к удаленному «родителю».

Посмотрите на настройку каскадного удаления, а также найдите триггеры, которые могут быть написаны неправильно.

1 голос
/ 04 февраля 2011

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

...