0

次のトリガーを実装しました。

CREATE TRIGGER [OnContactDeleted]
    ON [TABLE].[Contact]
    INSTEAD OF DELETE
    AS 
    BEGIN
        SET NOCOUNT ON
        /*Store contact ID to variable*/
        Update [TABLE].[Account] Set [PrimaryContactID] = null where [TABLE].[Account].[PrimaryContactID] = (Select ContactID from Deleted)
        Delete from [TABLE].[Contact] where [TABLE].[Contact].[ContactID] = (Select ContactID from Deleted)
    END

別のテーブルから一連の外部キーをクリアしてから、現在のレコードを削除します。これは、削除時に外部キーを null に設定しても機能しないためです。

私の質問は、このトリガーを try...catch ブロックにラップして、例外が発生した場合にロールバックできるようにすることです。それは良い習慣であり、この種のトリガーに対してそれを行う必要がありますか?

ありがとう、ジェイソン

4

1 に答える 1

1

これは失敗するままにし、コンシューマー (DELETE ステートメントを実行するコード) で例外を処理させたいと思います。この削除のコンテキスト内に、この操作が失敗するトリガーとなる論理的な理由があってはならないため、失敗の原因となる外的要因になります。したがって、例外も外部で処理する必要があります。通常、DELETE もトランザクション内で行われるため、ロールバックが行われる場所になります。

于 2009-02-13T11:19:06.060 に答える