Sql 删除后触发器并不总是触发
我有表A,B,C。A有一个称为BId的可为空的FK到B,B有一个带有级联删除的FK到C 当C被删除时,我需要将A上的BId设置为NULL。因此,当C上的DELETE级联到B时,我希望执行以下触发器:Sql 删除后触发器并不总是触发,sql,sql-server,triggers,cascading-deletes,Sql,Sql Server,Triggers,Cascading Deletes,我有表A,B,C。A有一个称为BId的可为空的FK到B,B有一个带有级联删除的FK到C 当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 WHE
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并更新表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
我懂了。在上设置NOCODE的原因是什么?只是为了抑制信息
n行受影响
等