0

SQL プロシージャを使用してトランザクションを開始し、他の 2 つのプロシージャを実行してから、コマンド「commit」で最初のプロシージャを実行したいと考えています。これが可能だと思いますか?試しましたが、エラーが発生しました。 EXECUTE 後のトランザクション数は、BEGIN ステートメントと COMMIT ステートメントの数が一致していないことを示しています。前のカウント = 0、現在のカウント = 1。

4

2 に答える 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 に答える