背景: .NET Framework 2.0 で開発された Web サイトがあり、Sql Server 2005 で作成されたデータベースを使用しています。また、.NET Framework 4.0 で開発された Web サイトもあり、これは Sql Server 2008 で作成されたデータベースを使用しています。 . 両方のデータベース (Sql Server 2005 から Sql Server 2008 へ) をリンクして、「Sql Server 2005 データベースのリンク サーバー」を作成しました。
シナリオ: Sql Server 2005 でホストされているデータベースにレコードを作成すると、トランザクションのシーケンスは次のようになります。 Sql Server 2005 データベースでホストされているテーブルにレコードを挿入します。この挿入は、挿入後にトリガーを実行します。トリガー内で、ストアド プロシージャ (Sql Server 2008 データベースでホストされている) を実行します。このストアド プロシージャは、「リンクされたサーバー」を使用して実行されます。このストアド プロシージャは、Sql Server 2008 データベースでホストされているテーブルへの挿入を実行します。Sql Server Management Studio 2005 を使用して、Sql Server 2005 データベースでホストされているテーブルへの挿入を手動で実行すると、すべてがうまく実行されますが、Web サイト (.NET 2005) の UI を使用してレコードを作成しようとすると、このエラー:
現在のトランザクションをコミットできず、ログ ファイルに書き込む操作をサポートできません。トランザクションをロールバックします。Microsoft 分散トランザクション コーディネーター (MS DTC) が分散トランザクションをキャンセルしました。
誰が何が起こっているのか知っていますか?