0

シリアライズ可能なトランザクションで SQL ストアド プロシージャを呼び出す C# クラスを使用しています。

そのため、ストアド プロシージャで問題が発生した場合、すべてがロールバックされます。

SQL ストアド プロシージャには、常に実行する必要があるステートメントが 1 つあります (ストアド プロシージャがある時点で失敗し、ロールバックが発生した場合でも)。ステートメントはレコードの更新です。

C# ライブラリを変更できないため、ストアド プロシージャでこれを行う必要があります。

トランザクションの外でその 1 つのステートメントを実行する方法はありますか?

4

3 に答える 3

1

おそらくSAVE TRANSACTIONを使用できます。分散トランザクションではサポートされておらず、ステートメントを最初に実行する必要があるため、探しているものではない可能性があります。

于 2013-06-26T20:39:02.753 に答える
0

私は解決策を見つけました。私は、SQL が C# クラスによってトランザクションの問題で呼び出されたことを認識していたことに気づきませんでした。

常に実行する必要がある更新ステートメントは、手順の最初のステップ (および最後のステップ) です。はっきりさせておきます: 私は IF 関数を持っています。true の場合、更新は何があっても発生するはずです。false の場合は、何らかのトランザクション ロジックを実行する必要があります。現在、C# クラスでは、ストアド プロシージャからの結果が必要です。proc が結果を返さない場合 (update ステートメントのように)、トランザクションをロールバックします。

したがって、update ステートメントの直後に次の行を追加するだけで、更新が行われます :)

IF @@TRANCOUNT > 0
    BEGIN
        COMMIT TRANSACTION
    END
于 2013-06-26T21:07:35.503 に答える