我在表A-> B之间使用外键。 A->孩子B->父母
当我从B中删除一个寄存器时,A中的所有子节点都被删除,因为我创建了一个删除级联约束。但是,表A在AFTER DELETE条件下有一个触发器。
问题是当A-> B之间的约束移除A寄存器时,此触发器未运行。
我可以强制FK激活该删除触发器吗?
(MS SQL 2008)
答案 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
所以我认为没有必要在外部强制触发。