3

将应用程序从 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”并且不会有问题。

出于这个原因,我正在考虑通过使用触发器来实现引用约束。所以我必须创建一个插入和更新触发器,我相信。有没有我可以使用的模板?

我想确保我没有忽略任何东西,乍一看这个问题,我错过了应该编写更新触发器,以便它可以验证更新后约束仍然有效。- 这就是我正在寻找模板的原因,所以我不会错过任何类似的东西。

4

1 回答 1

1

Triggers are often sources of trouble. A common approach would be to set up your data access layer that will create a transaction, delete the 'children' (cascade part) then delete the parent.

于 2012-05-02T20:26:21.797 回答