SQL Server - поддержание ссылочной целостности без триггера CASCADE и INSTEAD OF - PullRequest
4 голосов
/ 27 января 2012

У меня есть таблица (TableB), которая имеет отношение внешнего ключа с родительской таблицей (TableA).

Когда я удаляю запись в таблице A, я хочу сохранить ссылочную целостность, удаляя все записи вTableB, которые ссылаются на удаленную запись в TableA.

Обычно я бы НА УДАЛЕНО КАСКАД.Однако из-за структуры таблиц и чрезмерной защиты от нескольких каскадных путей в SQL Server это невозможно для этого конкретного отношения.

Я также не могу использовать триггер INSTEAD OF, поскольку у самой TableA есть отношение внешнего ключа CASCADE

То, что я думаю сделать, - это изменить отношение между TableA и TableB на ON DELETE SET NULL, а затем создать триггер AFTER для очистки записей NULL в TableB.

AreЕсть ли лучшие способы борьбы с этим сценарием?

1 Ответ

0 голосов
/ 06 февраля 2012

Можете ли вы изменить другое ограничение, которое мешает вам добавить это как ON DELETE CASCADE?

Можете ли вы добавить столбец DeleteMe, затем выдать UPDATE A SET DeleteMe = 1, а затем использовать триггер послесначала удалить строки таблицы B, а затем запрошенные строки таблицы A?

Можете ли вы разделить или объединить таблицы (то есть по вертикали), чтобы разделить их взаимоисключающие зависимости?

...