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