SQL プロシージャを使用してトランザクションを開始し、他の 2 つのプロシージャを実行してから、コマンド「commit」で最初のプロシージャを実行したいと考えています。これが可能だと思いますか?試しましたが、エラーが発生しました。 EXECUTE 後のトランザクション数は、BEGIN ステートメントと COMMIT ステートメントの数が一致していないことを示しています。前のカウント = 0、現在のカウント = 1。
質問する
382 次
2 に答える
0
これは、SQL Server がネストされたトランザクションを実際にサポートしていないために発生します。
ネストされたストアド プロシージャ (トランザクションではない) でコミットまたはロールバックすると、開始時とエントリ時の @@TRANCOUNT の不一致により、エラー 266 が生成されます。
同じ SPROC で BEGIN TRAN と COMMIT をペアにする必要があります。
ネストされたトランザクションの概念がない場合は、同じ sproc でロールバック/コミットを行う必要があります。SET XACT_ABORT ON を使用すると、@@TRANCOUNT の不一致によって発生するエラー 266 を抑制することができます。
于 2012-05-08T07:49:30.283 に答える
-1
SQLサーバーのネストされたトランザクションについてはわかりませんが、これを試すことができます
Begin Try
Begin Transaction1
Call Proc1
Call Proc2
Call Proc3
Commit
End Transaction
Catch
Rollback
于 2012-05-08T08:15:22.510 に答える