1. ホーム
  2. sql-server

[解決済み】エラー "INSERT EXEC文はネストできません。" "INSERT-EXEC文の中でROLLBACK文は使用できません。" これを解決するにはどうすればよいですか?

2022-01-31 15:29:49

質問

3つのストアドプロシージャがあります。 Sp1 , Sp2Sp3 .

最初のもの( Sp1 ) が実行され、2つ目のもの ( Sp2 ) に保存し、返されたデータを @tempTB1 を実行し、2つ目は3つ目を実行します( Sp3 にデータを保存します。 @tempTB2 .

を実行すると Sp2 からのすべてのデータを返します。 Sp3 しかし、問題は Sp1 実行すると、このエラーが表示されます。

INSERT EXEC ステートメントをネストすることはできません。

の場所を変えてみました。 execute Sp2 と表示され、別のエラーが発生しました。

ROLLBACKステートメントを使用することはできません。 を INSERT-EXEC 文の中で使用することができます。

どのように解決するのですか?

これは、ストアドプロシージャのチェーンからデータを「バブル」アップしようとするときによくある問題です。SQL Server の制限として、一度にアクティブにできる INSERT-EXEC は 1 つだけです。以下を参照することをお勧めします。 ストアドプロシージャ間でデータを共有する方法 は、この種の問題を回避するためのパターンについて非常に詳しい記事です。

例えば、Sp3をTable-valued関数にすることで、回避することができます。