【发布时间】:2013-09-08 11:12:05
【问题描述】:
假设我有三个表:
表_1:
ID INT PRIMARY
name NVARCHAR
表_2:
ID INT PRIMARY
Table_1_ID INT (foreign key)
表_3:
ID INT PRIMARY
Table_2_ID INT (foreign key)
前两个表有以下触发器:
-- Table_1
CREATE TRIGGER tr_1
ON Table_1
INSTEAD OF DELETE
AS
BEGIN
DELETE FROM Table_2
WHERE Table_1_ID IN (SELECT deleted.ID FROM Table_1)
DELETE FROM Table_1
WHERE ID IN (SELECT deleted.ID FROM deleted)
END
-- Table_2
CREATE TRIGGER sr_bf_trigger_delete_ID
ON Table_2
INSTEAD OF DELETE
AS
BEGIN
DELETE FROM Table_3
WHERE Table_2_ID IN (SELECT deleted.ID FROM deleted)
DELETE FROM Table_2
WHERE ID IN (SELECT deleted.ID FROM deleted)
END
这个想法是,一旦我删除Table_1 中的一行(或多行),它将启动触发器并删除Table_2 中的相应行。但是,在删除Table_2中的行之前,Table_3中的对应行被删除了。
这行得通吗?我看到的可能问题是我两次访问同一个“已删除”表。
【问题讨论】:
标签: sql sql-server triggers