2012-04-25 10 views
3

MSSQL + OracleからSybaseへの移植アプリケーションで、 'delete delete cascade'に問題があります - Sybaseにはオプションがありません。参照制約をトリガーに置き換える一般的な方法はありますか?

Sybaseには、カスケード削除を実装するためのトリガーとのリンクがあります。削除:http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.ase_15.0.sqlug/html/sqlug/sqlug815.htm 「on delete cascade」として使用する場合、その解決策に問題があります。

参照制約がチェックされた後にトリガーが実行されるという問題があります。 問題はここに例示されている:

--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「」制約のため、失敗します。トリガーが(後ではなく)参照制約のチェックの前に起動した場合、テーブル 'A'から値 '1'が削除され、問題は発生しませんでした。

このため、私は、トリガを使用して参照制約を実装しようと考えています。だから私は挿入と更新のトリガーを作成する必要があります、と私は信じています。私は使用できるテンプレートがありますか?

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

答えて

1

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

関連する問題