私は「Microsoft SQL Server 2012(SP3)」データベースにいくつかのSPを持っています。 これらのSPは、VB6アプリケーションと他のSP、または.Netアプリケーションから呼び出される可能性があります。TSQL - 分散トランザクションまたはローカルトランザクション?
SPが他のSPまたはVB6アプリケーションから呼び出された場合、エラーまたは無効な入力の場合には、現在のトランザクションをロールバックしてraiserror
で適切なエラーメッセージを表示できます。
しかし、複数のWCFサービスは、(それが会社の標準である、我々はMS DTCを使用)を関与している場合、私は、トランザクションをロールバックしてはならないと私は唯一べき .NETアプリケーションによって開かれた接続が分散トランザクションにフックされているので、 raiserror
コマンドを呼び出します。
我々は分散トランザクションをロールバックする場合は、raiserror
コマンドを使用して発生したすべてのエラー・メッセージが失われたと.NET側で我々はそのメッセージで例外を取得しています
Microsoft分散トランザクションコーディネータ(MS DTC) は、私が分散トランザクションにまたはSPの内部にコーディングしながら、私はローカル・トランザクションにいる場合だ場合
はどのように知ることができる分散トランザクションをキャンセルしたのか?分散トランザクション中の場合、私はロールバック文を実行しません。
ご協力いただければ幸いです。同じ問題に直面したもののため
多分、このスレッドは、うまくいけばうまくいけばそれほど古くはありませんhttp://stackoverflow.com/questions/2919018/in-sql-server-how-do-i-know-what -transaction-mode-im-currently-using – Petaflop
また、あなたが持っているこれらのSPの数はわかりませんが、ロールバックする必要があるかどうかを示すために、それぞれのパラメータを持つことができます – Petaflop
@MSANZありがとう、私はすでにこのスレッドを訪れましたが、分散トランザクションについては役に立ちませんでした。これは、暗黙的でない明示的なトランザクションモードだけを示すことができます。各SPにパラメータを追加することについては、膨大な数のSPと、SPが他のSPへのサブスクリプションコールを行うため、事実上不可能です。私は、SPを却下するトランザクションが呼び出されるパスを知ることができないので、すべてのSPにそのパラメータを追加し、後続のすべてのコールにその値を伝播する必要があります。 –