このようないくつかのリソースによると、
トリガーのコンテキスト内で実行されるクエリは、トランザクションに自動的にラップされます。トリガーコードに分散クエリがある場合、トランザクションは自動的に分散トランザクションにプロモートされます。
簡単な質問-この動作を防ぐ方法はありますか?トリガー内のコードがトランザクションのコンテキストで実行されないようにする方法を探しています。
このようないくつかのリソースによると、
トリガーのコンテキスト内で実行されるクエリは、トランザクションに自動的にラップされます。トリガーコードに分散クエリがある場合、トランザクションは自動的に分散トランザクションにプロモートされます。
簡単な質問-この動作を防ぐ方法はありますか?トリガー内のコードがトランザクションのコンテキストで実行されないようにする方法を探しています。
呼び出し元のトランザクションが待機する必要がないように非同期で何かを行おうとしている場合は、まさにそれを実行するように設計されたService Brokerを検討してください。非同期タスクを実行し、呼び出し元に制御を戻します。トランザクションスコープ。
もう1つのアイデアは、トリガーに作業を実行させずに、代わりに作業項目をキューテーブルにポップし、バックグラウンドプロセスを継続的に実行してキューを処理することです。inserted
作業項目が/内のデータのセットを操作する場合、これは必ずしも簡単ではありませんが、deleted
コンテキストがなければ、実行可能なオプションのように見えます。
トリガーが呼び出し元のトランザクションの一部になるのを防ぐ方法がわかりません。実際、それが全体のポイントです。
これは「自律トランザクション」と呼ばれ、実装する最も簡単な方法は、元のデータベースを指すリンクサーバーを作成することです。
考えられる解決策については、このMSDNブログを参照してください。