将应用程序从MSSQL + Oracle移植到Sybase,并且'on delete cascade'存在问题 - Sybase没有该选项。
Sybase有一个带有触发器的链接,用于实现级联删除:http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.ase_15.0.sqlug/html/sqlug/sqlug815.htm 但是当将其用作“删除级联”时,该解决方案存在问题。
问题是在检查任何引用约束后执行触发器。 这里说明了这个问题:
--drop table A
--drop table B
create table A (c int primary key)
create table B (c int primary key)
alter table A
add constraint Ac FOREIGN KEY (c) REFERENCES B(c)
create trigger delBA on B for delete
as delete A from A, deleted where A.c = deleted.c
insert into B values (1)
insert into A values (1)
delete B where c = 1
由于'Ac'约束,'delete'语句将失败。如果在检查引用约束(而不是之后)之前触发了触发器,它将从表'A'中删除值'1'并且不会出现问题。
出于这个原因,我正在考虑使用触发器来实现引用约束。所以我必须创建一个Insert和Update触发器。我可以使用一些模板吗?
我想确保我没有忽略任何东西,首先看看问题,我错过了应该编写更新触发器,以便它可以验证更新后约束仍然有效。 - 这就是我正在寻找模板的原因,所以我不会错过任何类似的东西。
答案 0 :(得分:1)
触发器通常是麻烦的来源。一种常见的方法是设置将创建事务的数据访问层,删除“子项”(级联部分),然后删除父项。