SQL Server 2005 — внешние ключи с каскадным удалением

Есть ли способ обойти это в SQL Server 2005?

(Меня это раздражает, и каждый раз, когда я сталкиваюсь с этим, я впадаю в ступор. Но это первый раз, когда мне пришлось иметь дело с переполнением стека И я был в Stack Overflow. Пожалуйста, сохраните то немногое здравомыслие, которое у меня есть!)

Таблица измерений:
id INT IDENTITY(1,1)

FactTable:
source_id INT NOT NULL,
target_id INT NOT NULL

Я создал внешний ключ от «Fact.source_id» до «Dimension.id» и настроил его с каскадным удалением и каскадным обновлением.

Когда я попытался сделать то же самое с «Fact.target_id», я получил сообщение об ошибке «о нет, нет, нет», поскольку существует несколько путей для каскада.

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

****всхлип****


person MatBailie    schedule 21.04.2009    source источник


Ответы (2)


Да, используйте триггер INSTEAD OF. Он перехватит команду DELETE, и вы сможете соответствующим образом направить логику.

person K. Brian Kelley    schedule 21.04.2009

Вы можете каскадно удалять только из одного отношения. Предлагаем вам настроить это в триггерах вместо этого.

person HLGEM    schedule 21.04.2009