Имя столбца или количество предоставленных значений не соответствует определению таблицы во время выполнения плана на

В настоящее время мы сталкиваемся с проблемой только тогда, когда выполняем хранимую процедуру, сохраняя Включить фактический план выполнения. В противном случае хранимая процедура выполняется нормально и возвращает ожидаемые результаты. В чем причина такого поведения?

Я уже переходил по этим ссылкам, но здесь ошибка другая, поскольку она возникает только тогда, когда мы оставили Включить фактический план выполнения - ВКЛ. Link1 Link2

Пример кода (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 План выполнения оставлен ВКЛ.

Edit2: когда мы заменили локальную временную таблицу глобальной временной таблицей (временная таблица, о которой я говорю, используется для передачи набора результатов из PROC2) внутри PROC2, выполнение PROC1 произошло успешно.

Edit3: когда мы удалили блок TRY-CATCH из внутреннего sp (PROC2) и выполнили PROC1, сохраняя Include Actual Execution Plan - ON, об ошибках не сообщалось, и выполнение было завершено успешно. Описание ошибки


person Abhishek    schedule 15.10.2015    source источник
comment
как создается таблица #temptable в Proc1 SP?   -  person Eduard Uta    schedule 15.10.2015
comment
Как показано ниже - IF OBJECT_ID('tempdb..#temptable') IS NOT NULL BEGIN DROP TABLE #temptable; END CREATE TABLE #temptable ( col1 datatype, col2 datatype, ----------------- ----------------- )   -  person Abhishek    schedule 15.10.2015