如何创建模拟多个ON DELETE CASCADE的触发器?

时间:2011-09-14 22:02:25

标签: sql-server-2008 triggers foreign-keys cascading-deletes

我有外键表,如下所示:

Table1A
|
|- Table2A3A

Table1B
|
|- Table2B
   |
   |- Table2A3A

(即,表2A3A引用表1A和表2B,其引用表1B。)

我想创建一个触发器,这样,当Table1A,Table1B或Table2B表中的任何内容被删除时,Table2A3A中引用已删除行的内容也会被删除。

我在问,因为如果我尝试在SQL Server中添加on delete cascade,它会返回Introducing FOREIGN KEY constraint on table 'Table2A3A' may cause cycles or multiple cascade paths

这种触发器的SQL代码是什么?

编辑:

抱歉,我误读了我的桌子:

Table1A
|
|- Table2A3A
|
|- Table2B
   |
   |- Table2A3A

(即,表2A3A参考表1A和表2B,其引用表1A。)

1 个答案:

答案 0 :(得分:0)

根据你的图,在关系理论或SQL实践中没有理由认为级联删除应该导致循环或多个级联路径。也许您应该为每个表发布DDL,以便我们可以看到其他可能会发生的事情。

这是我作为PostgreSQL测试所写的内容。 (可以在一段时间内保存其他人。)我可以插入和删除级联。

create table Table1A (
  ta_id integer primary key
);

create table Table1B (
  tb_id integer primary key
);

create table Table2B (
  tb_id integer primary key references Table1B (tb_id) on delete cascade
);

create table Table2A3A (
  tb_id integer not null references Table2B (tb_id) on delete cascade,
  ta_id integer not null references Table1A (ta_id) on delete cascade,
  primary key (tb_id, ta_id)
);