Sql server 2008 如何创建一个触发器来模拟删除级联上的多个触发器?

Sql server 2008 如何创建一个触发器来模拟删除级联上的多个触发器?,sql-server-2008,triggers,foreign-keys,cascading-deletes,Sql Server 2008,Triggers,Foreign Keys,Cascading Deletes,我有带外键的表,如下所示: Table1A | |- Table2A3A Table1B | |- Table2B | |- Table2A3A (也就是说,表2A3A参考了表1A和表2B,表2B参考了表1B。) 我想创建一个触发器,以便在表1a、表1b或表2b中的任何内容被删除时,表2a3a中引用已删除行的内容也被删除 我这样问是因为如果我尝试在SQL Server中的delete cascade上添加,它会返回在表“Table2A3A”上引入外键约束,可能会导致循环或多个级联

我有带外键的表,如下所示:

Table1A
|
|- Table2A3A

Table1B
|
|- Table2B
   |
   |- Table2A3A
(也就是说,表2A3A参考了表1A和表2B,表2B参考了表1B。)

我想创建一个触发器,以便在表1a、表1b或表2b中的任何内容被删除时,表2a3a中引用已删除行的内容也被删除

我这样问是因为如果我尝试在SQL Server中的delete cascade上添加
,它会返回
在表“Table2A3A”上引入外键约束,可能会导致循环或多个级联路径

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

编辑: 对不起,我看错了我的桌子:

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

(也就是说,表2A3A引用了表1A和表2B,表2B引用了表1A。)

在关系理论或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)
);

为什么要使用级联删除?这些都是坏消息……只需创建一个存储过程,从要删除的表中删除行。您将拥有更多的控制权,可以实现错误处理等。