我有三个表,可以将它们称为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