[英]How to retrieve data in a trigger from the header table that was already deleted
我有一个标题和一个明细表的情况。 Detail表与Cascade删除的Header表具有外键关系。
当详细记录被删除时,我需要使用触发器来更新其他表。 我遇到的问题是我需要从Header表以及Detail表中获取一些信息以删除记录。 如果删除明细记录,然后删除标题记录,则触发器似乎运行良好。 但是,如果我删除标题记录,由于级联删除操作而又删除了明细记录,那么在触发器执行时,标题记录已被删除,我无法从中访问所需的信息。
我是触发器的新手,所以我想知道是否有我不知道的东西以及如何实现这一点。
这是我的代码:
ALTER TRIGGER [Detail_Delete]
ON [Detail]
AFTER DELETE
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Table UpdateTableType
-- Here is where the problem lies.
-- No records are found here because the Header record isn't found.
INSERT @Table
(HeaderID, UserID)
SELECT d.HeaderID, h.UserID
FROM deleted d
JOIN Header h ON h.HeaderID = d.HeaderID
EXECUTE sp_UpdateSummary
@Table = @Table
END
我不会使用级联删除,因为如您所见,已删除的父数据不可用
为此,存储过程是理想的。 如果不是出于某种原因,则可以在Header表上使用BEFORE触发器执行Detail和其他删除操作(当然还有Header表)
ALTER TRIGGER [Header_Delete]
ON [Header]
INSTEAD OF DELETE
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Table UpdateTableType
-- DELETED has data, even though Header has not yet been touched
INSERT @Table
(HeaderID, UserID)
SELECT d.HeaderID, d.UserID
FROM deleted
DELETE Detail WHERE ... (using @Table)
DELETE Other WHERE ... (using @Table)
DELETE Header WHERE ... (using @Table)
EXECUTE sp_UpdateSummary
@Table = @Table ...
END
如果首先删除了Header
记录,那么当“ Detail
-记录”触发器运行时,您将无权访问它,因为Header
记录已被删除。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.