Mar*_*kis 4 sql sql-server triggers cascade foreign-keys
我需要在名为CATEGORY的表上执行ON DELETE CASCADE,其中包含以下columls 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
Run Code Online (Sandbox Code Playgroud)
当我手动删除具有子类别的类别时,我得到以下异常:
知道触发器有什么问题吗?
更新: 抱歉编辑,但我有另一列CATEGORY.CAT_SCH_ID,这是另一个表CAT_SCH.ID的FK.此FK也有一个CASCADE DELETE,这意味着一旦我删除了CAT_SCH,它的CATEGOR也必须被删除.所以,我在定义触发器时遇到此错误:
无法在表'CATEGORY'上创建INSTEAD OF DELETE或INSTEAD OF UPDATE TRIGGER'TRG_DEL_CATEGORY_WITH_CHILDREN'.这是因为该表具有带有级联DELETE或UPDATE的FOREIGN KEY.
有任何想法吗?