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' が削除され、問題は発生しません。

このため、トリガーを使用して参照制約を実装することを考えています。したがって、Insert および Update トリガーを作成する必要があると思います。使用できるテンプレートはありますか?

何も見落としていないことを確認したいのですが、最初に問題を見て、更新後に制約がまだ有効であることを検証できるように、更新トリガーを作成する必要があることを見逃しました。- それが私がテンプレートを探している理由なので、似たようなものを見逃すことはありません.

4

1 に答える 1

1

トリガーは、多くの場合、トラブルの原因となります。一般的なアプローチは、トランザクションを作成し、「子」(カスケード部分) を削除してから親を削除するデータ アクセス レイヤーを設定することです。

于 2012-05-02T20:26:21.797 に答える