2011-12-30 3 views
0

私は両方の場所でそれを行うと、トランザクション管理に「限られた」問題があると推測されます。呼び出しているストアドプロシージャでトランザクションを定義する場合、.NETコードでトランザクションを使用する必要がありますか?

私は、アプリケーションレベルでトランザクションを持つことが考えられる理由は、sprocs(つまり、取得したデータから得られた何かの照合と計算中に潜在的に利用できないビジネス固有のロジック、 「ビジネスルールの整合性の - より良い用語の希望のための)ロールバックを強制することができ

おかげで、

+0

_two_ストアドプロシージャを呼び出すと、両方の呼び出しが成功するか、両方とも失敗する必要がありますか? – Oded

+0

ストアドプロシージャを同じ@@ trancountで入力したり終了したり、@@トランクカウントを1以上にしてロールバックさせたりすると、トランザクション管理に*大きな*問題が生じることがあります。私の答えを参照してください – gbn

+0

返信いただきありがとうございます。 – brumScouse

答えて

2

をそれぞれ呼ばれる層は、既存のトランザクションを認識している場合は、両方のレベルでトランザクションを持つことができます

ストアドプロシージャが再利用されることを期待するならば、このawarを作ることができますクライアントコードから開始されたトランザクション、別のストアドプロシージャ、開始/コミット/ロールバックのいずれも行いません。

トランザクションが検出されなかった場合は、トランザクションを開始/コミット/ロールバックできます。

SQL Serverには実際にネストされたトランザクションまたは自律型トランザクションがないため、この動作は重要です。したがって、格納された各ストアドプロシージャを安全にし、そのことについて考える必要はありません。ここに私の答えで

パターンは、トランザクションを検出し、正確にこれを行います。
Nested stored procedures containing TRY CATCH ROLLBACK pattern?

+0

ありがとうございます。決定的な答え。 – brumScouse

0

それを行うには大丈夫です。コアビジネスロジック/サービスの外部でストアドプロシージャを使用する場合でも、トランザクションセーフにすることができます。ストアドプロシージャが一連の操作の一部である場合、ストアドプロシージャはネストされたトランザクションになります。

関連する問題