强制级联外键激活删除触发器(mssql)

时间:2014-06-17 11:32:46

标签: sql sql-server sql-server-2008

我在表A-> B之间使用外键。 A->孩子B->父母

当我从B中删除一个寄存器时,A中的所有子节点都被删除,因为我创建了一个删除级联约束。但是,表A在AFTER DELETE条件下有一个触发器。

问题是当A-> B之间的约束移除A寄存器时,此触发器未运行。

我可以强制FK激活该删除触发器吗?

(MS SQL 2008)

1 个答案:

答案 0 :(得分:0)

我尝试了你所讨论的相同场景(只有名称变为反向),所有内容都按预期工作。表模式是

CREATE TABLE A(ID INT PRIMARY KEY);
INSERT INTO A VALUES(1);
INSERT INTO A VALUES(2);
INSERT INTO A VALUES(3);
INSERT INTO A VALUES(4);
CREATE TABLE B(BID INT FOREIGN KEY(BID) REFERENCES A(ID) ON DELETE CASCADE);
INSERT INTO B VALUES(1);
INSERT INTO B VALUES(2);
INSERT INTO B VALUES(3);
INSERT INTO B VALUES(4);

并创建了一个触发器 -

CREATE TRIGGER B_TRIGGER ON B
AFTER DELETE
AS
BEGIN
    RAISERROR ('TRIGGER IS RUNNING AFTER DELETE OPERATION!', 16, 1);    
END

当我从表A中删除一行(即父表)时,由于级联删除而自动删除了表B中具有相同id的行,同时也触发了触发器。

SQL Server Database Error: TRIGGER IS RUNNING AFTER DELETE OPERATION!   9   0

所以我认为没有必要在外部强制触发。