当我尝试在级联上删除时,为什么我的触发器出错?

时间:2013-05-15 09:23:20

标签: sql-server triggers cascade

我在数据库中有两个表,我想在带有触发器的级联上删除。我使用在关系中使用级联删除,但在这种情况下我有更多的表,SQL Server不允许我在关系中设置cascde删除,因为它会创建一个循环。

所以我想创建一个触发器来删除表中的寄存器,我无法在关系中设置级联删除。

我使用此触发器:

CREATE TRIGGER trg_myTrigger
   ON  Componentes
   AFTER DELETE
AS 
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for trigger here
    Delete from mytable2 where IDParentFromTable1 IN(select deleted.IDtable1 from deleted)
END
GO

但是我得到了外键的错误。

我真的不知道为什么会收到这个错误。

感谢。

1 个答案:

答案 0 :(得分:2)

触发器在DELETE之后触发,因此外键错误发生在触发器运行之前。

您需要使用

之一
  • 存储过程以删除mytable2然后删除Componentes
  • INSTEAD OF(触发前)
  • 交易中的两个单独删除