1

目前,我们仅在执行保持Include Actual Execution Plan - ON的存储过程时才面临该问题。否则,存储过程执行良好并按预期返回结果。这种行为的原因是什么?

我已经浏览过这个链接,但是这里的错误是不同的,因为它只发生在我们保持Include Actual Execution Plan - ON时。 链接 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 再次运行正常,并在包含和不包含保留的实际执行计划的情况下给出预期的结果ON

Edit2:当我们将本地临时表替换为全局临时表(我所说的临时表用于从 PROC2 传递结果集)在 PROC2 内部时,PROC1 的执行成功发生。

Edit3:当我们从内部 sp (PROC2) 中删除 TRY-CATCH 块并执行 PROC1 时,保持Include Actual Execution Plan - ON没有报告错误并且执行成功完成。 错误描述

4

0 回答 0