【问题标题】:why I get an error with the trigger when I try to delete on cascade?为什么当我尝试级联删除时触发器出错?
【发布时间】:2013-05-15 17:27:07
【问题描述】:

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

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

我使用这个触发器:

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

但是我得到了外键错误。

我真的不知道为什么会出现这个错误。

谢谢。

【问题讨论】:

    标签: sql-server triggers cascade


    【解决方案1】:

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

    你需要使用其中之一

    • 先删除 mytable2 再删除 Componentes 的存储过程
    • INSTEAD OF(触发器前)
    • 事务中的两个单独删除

    【讨论】:

    • 最后我使用 i 而不是 delete 触发器来做到这一点。真的我知道 inestad of,但现在我不记得它是怎么说的了。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    • 2011-10-11
    • 1970-01-01
    相关资源
    最近更新 更多