Мне нужно выполнить 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' для таблицы 'CATEGORY'. Это связано с тем, что таблица имеет FOREIGN KEY с каскадным DELETE или UPDATE.
Любые идеи?