如何在级联删除中访问已删除的父数据?

时间:2019-10-23 17:52:41

标签: sql-server tsql database-trigger

我有三个表,可以将它们称为GrandParent,Parent和Child。父级具有使用级联删除设置的GrandParent主键的外键。同样,“孩子”具有“父母”主键的外键。

我当前正在尝试创建一个触发器,以便每当删除三个表(祖父母,父母或孩子)中的任何一个记录时,我都需要调用存储过程。为了完成其工作,存储过程需要GrandParent的主键和Child列中的值。

当前,我正在考虑在Child上创建触发器。我的问题是,当触发器设置为“ ON DELETE”时,当我进入触发器运行时,GrandParent的值已消失或无法从数据库中访问,而Deleted虚拟表仅包含Child的数据。桌子。

我尝试使用“ INSTEAD OF DELETE”触发器,但显然不能在带有Cascade删除的表上使用。

在孩子的DELETE触发器中,是否可以通过GrandParent或Parent访问数据?如果我至少可以去上父母,则可以使用外键从GrandParent表中获取所需的内容。


CREATE TRIGGER [DeletionTrigger] ON [Child] 
    ON DELETE
    AS
         DECLARE @ParentID int
         DECLARE @ApplicationID int
         DECLARE @GPID int

         SELECT @ParentID = ParentID, @ApplicationID = ApplicationID FROM deleted --ApplicationID is the item needed from Child table

         SELECT @GPID = GPID FROM Parent WHERE Parent.ParentID = @ParentID

         EXEC DeletionNotifier @GPID, @ApplicationID
    END 

0 个答案:

没有答案