Это структура таблицы: Id Name ParentId
SQL: Удалить все вложенные самостоятельно REFERENCING записи
ParentId
является внешним ключом к первичному столбцу Id
. Теперь давайте говорить у меня есть несколько строк, как: (только показывая ParentId
из рядов)
01
/ \
5 2
/\
3 4
У меня есть настройки InsteadOfDelete
триггера, как показано ниже:
CREATE TRIGGER [dbo].[tr_tb] ON [dbo].[Some_tb]
INSTEAD OF DELETE
AS
/*Delete from another table*/
DELETE FROM SomeOther_tb WHERE OtherId IN(SELECT Id FROM deleted);
/*Delete childs from this table*/
DELETE FROM Some_tb WHERE ParentId IN(SELECT Id FROM deleted);
/*Delete from this table*/
DELETE FROM Some_tb WHERE Id IN(SELECT Id FROM deleted);
При записи с Id = 01
(проверить представление Чайлдс выше) удаляется. Только немедленные дети (Id=5,2
) удаляются, оставляя за собой дочерние записи (Id = 3,4
).
Я принимаю InsteadOfTrigger
Функции не запускаются для детей (Id=5,2
).
Как решить эту проблему, чтобы все вложенные дети были удалены?
Почему бы не использовать каскадные удаления, поскольку это похоже на то, что вы делаете? – UnhandledExcepSean
Невозможно из-за множественного каскадного пути: https://www.mssqltips.com/sqlservertip/2733/solving-the-sql-server-multiple-cascade-path-issue-with-a-trigger/ –
Так что это самосоединяющийся стол? – UnhandledExcepSean