删除后触发器并不总是触发

AFTER DELETE trigger does not always fire

我有表 A、B、C。A 有一个到 B 的可空 FK,称为 BId,B 有一个到 C 的 FK,带级联删除。

删除C时,我需要将A上的BId设置为NULL。因此,当 C 上的 DELETE 级联到 B 时,我希望执行以下触发器:

CREATE TRIGGER AFTER_DELETE_B
ON B
FOR DELETE
AS

BEGIN

   DECLARE @bId INT

   SELECT @bId = Id FROM DELETED

   UPDATE A 
   SET BId = NULL 
   WHERE BId = @bId

END

然而,这似乎有时会执行,而其他人则不会。想不通为什么。

你的触发器不处理多行删除,它只从删除的行中捕获一个ID并更新table A中的相关值,因为只有一个变量,

您需要使用基于集合的方法来处理多个删除。

为此,您需要像这样修改触发器定义......

CREATE TRIGGER AFTER_DELETE_B
ON B
FOR DELETE
AS

BEGIN
 SET NOCOUNT ON;

   UPDATE A 
   SET A.BId = NULL
   FROM A 
   INNER JOIN  DELETED D ON A.BId = D.Id

END