現在、 Include Actual Execution Plan-ONを保持してストアド プロシージャを実行している場合にのみ、この問題に直面しています。それ以外の場合、ストアド プロシージャは正常に実行され、期待どおりに結果が返されます。この種の行動の理由は何でしょうか?
既にこのリンクを確認しましたが、 Include Actual Execution Plan をオンにした場合にのみエラーが発生するため、ここではエラーが異なります。 リンク 1 リンク2
サンプルコード (PROC1) -
CREATE PROCEDURE PROC1 (blah blah blah)
AS
BEGIN
BEGIN TRY
-------------
code
--------------
-----issue code-----
INSERT INTO #temptable (col1,col2,.....)
EXECUTE PROC2
-------------
code
--------------
END TRY
BEGIN CATCH
---------
RAISERROR(............);
END CATCH
END
サンプルコード (PROC2) -
CREATE PROCEDURE PROC2
BEGIN
BEGIN TRY
---------------
code
---------------
SELECT COL1,COL2,COL3,..... FROM #innersptemptable
END TRY
BEGIN CATCH
--------------------
RAISERROR();
--------------------
END CATCH
END
注: PROC2
挿入中に注意したのとまったく同じ数の列を返します#temptable
さらに情報が必要な場合はお知らせください。
環境 -
Microsoft SQL Server 2014 - 12.0.2000.8 (X64)
Feb 20 2014 20:04:26
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
Edit1: PROC1 でエラーが発生し、それがキャプチャされると、ERROR_PROCEDURE()
PROC2 の値が返されますが、PROC2 は正常に実行され、Include Actual Execution PlanがONに保持されている場合とない場合に、期待どおりの結果が得られることに注意してください。
Edit2: PROC2 内でローカル一時テーブルをグローバル一時テーブル (私が話している一時テーブルは PROC2 からの結果セットを渡すために使用されます) に置き換えると、PROC1 の実行は正常に行われました。
Edit3:内部 sp (PROC2) から TRY-CATCH ブロックを削除し、実際の実行計画を含める - ONのまま PROC1 を実行すると、エラーは報告されず、実行は正常に完了しました。