SQL Server: FK с собственной ссылкой, триггер вместо ON DELETE CASCADE

Мне нужно выполнить ON DELETE CASCADE для моей таблицы с именем CATEGORY, которая имеет следующие столбцы: CAT_ID (BIGINT) NAME (VARCHAR) PARENT_CAT_ID (BIGINT)

PARENT_CAT_ID - это FK для CAT_ID. Очевидно, что прекрасный SQL Server не позволяет мне использовать ON DELETE CASCADE, заявляя круговые или множественные пути к удалению.

Решение, которое я часто вижу, это триггеры. Я сделал следующий триггер:

USE [ma]
GO
/****** Object:  Trigger [dbo].[TRG_DELETE_CHILD_CATEGORIES]    Script Date: 11/23/2009 16:47:59 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[TRG_DELETE_CHILD_CATEGORIES] ON [dbo].[CATEGORY] FOR DELETE AS
SET NOCOUNT ON
/* * CASCADE DELETES TO '[Tbl B]' */
DELETE CATEGORY FROM deleted, CATEGORY WHERE deleted.CAT_ID = CATEGORY.PARENT_CAT_ID

Когда я вручную удаляю категорию с дочерними категориями, я получаю следующее исключение:

Есть идеи, что не так с моим триггером?

ОБНОВИТЬ: Извините за изменения, но у меня есть еще один столбец CATEGORY.CAT_SCH_ID, который является FK другой таблицы CAT_SCH.ID. Этот FK также имеет CASCADE DELETE, что означает, что после удаления CAT_SCH его CATEGORies также должны быть удалены. Итак, я получаю эту ошибку, когда я определяю триггер:

Невозможно создать INSTEAD OF DELETE или INSTEAD OF UPDATE TRIGGER 'TRG_DEL_CATEGORY_WITH_CHILDREN» на столе 'КАТЕГОРИЯ», Это связано с тем, что в таблице есть FOREIGN KEY с каскадным удалением или обновлением.

Есть идеи?

Ответы на вопрос(1)

Ваш ответ на вопрос