1

Sql Server 2008 では、作成したアプリケーションでさまざまな種類のログ記録を行うためのトリガーを作成するよう求められました。問題は、私の SQL が錆びていて、ロギングを行うためにトリガーに入れたもののいくつかが予期せずエラーになることがあることです。最終的にはすべてのエラーを解決するつもりですが、トリガーが予期せず失敗した場合、それをトリガーした更新または挿入がロールバックされ、アプリケーションの一部が破損するため、その間にトリガー コードがアプリケーションを壊します。トリガーコードの周りにtry catchブロックを配置しようとしましたが、他の言語で慣れていることを実行していないようで、それでも元のトランザクションをロールバックします。

エラーが発生したときに正常に終了し、トリガーしたトランザクションを完了させるトリガーを作成する方法/場合を知っている人はいますか?

4

1 に答える 1

3

トリガー本体のコードをtry-catch ブロックで囲むことができます。

CREATE TRIGGER tg
ON tt
AFTER DELETE
AS
    set xact_abort off; 
    BEGIN TRY
         sql_statements
    END TRY
    BEGIN CATCH
          dies gracefully
    END CATCH;

現在のトランザクションが自動的にロールバックされないように、xact_abortをオフに設定することを忘れないでください。

SQL フィドルのサンプル

于 2013-07-24T12:59:59.067 に答える