2011-11-27 1 views
3

У меня есть связь с именем Friends со следующими столбцами,на каскадное удаление на столе с двумя FK в той же таблице

User1ID 
User2ID 
Since 

User1ID и User2ID представляют собой набор первичных ключей в отношении. Они также являются внешними ключами, ссылающимися на таблицу Users. Теперь я хочу добавить ON CASCADE DELETE, так что когда пользователь из таблицы Users будет удален, удаляется также соответствующая строка из таблицы Friends. Однако MS SQL Server не позволяет мне добавить это ограничение.

Любые идеи, как мне изменить таблицу, чтобы выполнить эту задачу?

ответ

5

Вы не можете иметь несколько или круговые траекторий каскадных: она становится неоднозначной, что вы хотите сделать (скажем, один КАСКАД NULL, а другая CASCADE DELETE)

Я хотел бы использовать хранимую процедуру для удаления из Friends первых в сделке, то из Users (в TRY/CATCH, конечно, иметь дело с ошибками)

BEGIN TRAN 
    DELETE Friends WHERE User1ID = @UserID; 
    DELETE Friends WHERE User2ID = @UserID; 
    DELETE Users WHERE UserID = @UserID; 
COMMIT TRAN 
+0

Спасибо большое, я считаю, что такой подход намного лучше. Еще раз спасибо!! – ppoliani