SQL Server 2014を使用しています。私のストアドプロシージャはネストされたトランザクションプロシージャであり、それによってトランザクションを持つストアドプロシージャはほとんどコールされません。内部ストアドプロシージャのいずれかがエラーをヒットした場合、その後、私はトランザクションを開けませんでしたが場合、などSQL Serverストアドプロシージャのネストされたトランザクション
Begin Try
Begin Tran
Exec Stored Proc 1 (with begin tran inside)
Exec Stored Proc 2 (with begin tran inside)
Exec Stored Proc 3 (with begin tran inside)
Exec Stored Proc 4 (with begin tran inside)
Exec Stored Proc 5 (with begin tran inside)
Commit Tran
End Try
Begin Catch
Catch exception then roll back tran
End Catch
問題はトランザクション数が後に内部のストアドプロシージャが一致しない実行され、すべてロールバックされます内部ストアドプロシージャでは、ロールバックされません。誰も私にいくつかの提案を与えることができますか?
各手順の中にtry catchを使用してください。トランザクションを内部プロシージャでロールバックし、エラーを外部プロシージャに戻します。外側のprocでは、内側のprocからエラーが発生し、各トランザクションを呼び出すサイクルが壊れ、 – scsimon
こんにちは@scsimon、あなたの提案に感謝します。 たとえば、ストアproc 1と2が正常に実行されたが、ストアされたproc 3ヒットエラーが発生したとします。だから外側のキャッチとロールバックは、proc 1と2のストアド・プロシージャをロールバックします。 –