我需要对名为 CATEGORY 的表执行 ON DELETE CASCADE,该表具有以下列 CAT_ID (BIGINT) NAME (VARCHAR) PARENT_CAT_ID (BIGINT)
PARENT_CAT_ID 是 CAT_ID 上的 FK。显然,可爱的 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,它是另一个表 CAT_SCH.ID 的 FK。这个 FK 也有一个 CASCADE DELETE,这意味着一旦我删除了一个 CAT_SCH,它的 CATEGOries 也必须被删除。因此,当我定义触发器时出现此错误:
无法在表 'CATEGORY' 上创建 INSTEAD OF DELETE 或 INSTEAD OF UPDATE TRIGGER 'TRG_DEL_CATEGORY_WITH_CHILDREN'。这是因为该表有一个 FOREIGN KEY 和级联 DELETE 或 UPDATE。
有任何想法吗?