Sql 如何从已删除的标题表中检索触发器中的数据

Sql 如何从已删除的标题表中检索触发器中的数据,sql,tsql,triggers,Sql,Tsql,Triggers,我有一种情况,我有一个标题和一个细节表。明细表与带有级联删除的标题表具有外键关系 删除详细记录时,我需要使用触发器更新其他表。我遇到的问题是,我需要从标题表以及删除记录的详细信息表中提取一些信息。如果我删除细节记录,然后删除标题记录,则触发器似乎运行正常。但是,如果我删除了头记录,而头记录又由于级联删除而删除了细节记录,那么当触发器执行时,头记录已经被删除,我无法从中访问所需的信息 我对触发器比较陌生,所以我想知道是否有什么我不知道的,以及我是如何做到这一点的 这是我的密码: ALTER TRI

我有一种情况,我有一个标题和一个细节表。明细表与带有级联删除的标题表具有外键关系

删除详细记录时,我需要使用触发器更新其他表。我遇到的问题是,我需要从标题表以及删除记录的详细信息表中提取一些信息。如果我删除细节记录,然后删除标题记录,则触发器似乎运行正常。但是,如果我删除了头记录,而头记录又由于级联删除而删除了细节记录,那么当触发器执行时,头记录已经被删除,我无法从中访问所需的信息

我对触发器比较陌生,所以我想知道是否有什么我不知道的,以及我是如何做到这一点的

这是我的密码:

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触发器来执行细节和其他删除(当然还有Header表)


我不会使用级联删除,因为正如您所看到的,已删除的父数据不可用

存储过程是实现这一点的理想方法。如果不是出于任何原因,您可以在Header表上使用BEFORE触发器来执行细节和其他删除(当然还有Header表)


如果先删除
标题
记录,则当
详细信息
-记录触发器运行时,您将无法访问该记录,因为
标题
记录已被删除。

如果先删除
标题
记录,当
详细信息
-记录触发器在
标题
记录已被删除的情况下运行时,您无法访问它。

我忘了提到我使用的是SQL Server 2008 R2I忘了提到我使用的是SQL Server 2008 R2I我想这是我必须要做的事情。我想这是我必须要做的事情。
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