3

データベースにテーブル MyTab があるとします。たとえば、このテーブルのトリガーを削除します。次に、ストアド プロシージャで、このテーブルからデータを削除しようとしましたが、この削除のためだけに削除トリガーを停止したいと考えています。その後、トリガーを通常に戻します。次のようなストアド プロシージャにコードを含めることは可能ですか。

stop trigger on MyTab;
delete from MyTab where ...;
put the trigger back;
4

1 に答える 1

4

ここで説明したように、トリガーを無効にして有効にすることができますが、エラーが原因でトリガーが無効になったままになることがないように、おそらくこれをtry-catchやトランザクションに入れます。

例えば:

set xact_abort on; -- Auto-rollback on any error
begin transaction;

    alter table MyTab disable trigger TR_MyTab_Delete;

    delete from MyTab where 1/0 = 1; -- Causes div by zero error

    alter table MyTab enable trigger TR_MyTab_Delete; -- Won't run becuase of above error

commit;

上記のスクリプトはエラーをスローしますが、トリガーを無効のままにすることはありません。xact_abortを設定すると、トリガーの無効化を含め、トランザクションがロールバックされることが保証されます。

于 2013-02-06T20:52:52.300 に答える