1

現在、 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 を実行すると、エラーは報告されず、実行は正常に完了しました。 エラーの説明

4

0 に答える 0