Проблема с временной таблицей и слиянием результатов двух хранимых процедур

#sql-server #tsql #stored-procedures

#sql-сервер #tsql #хранимые процедуры

Вопрос:

Цель

У меня есть две хранимые процедуры, и я пытаюсь объединить их результаты в один набор результатов (я чувствую, что сейчас самое время упомянуть, что они не могут быть объединены ни в одном столбце).

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

Я знаю о локальных и глобальных временных таблицах и сеансах. Но если я вызываю хранимую процедуру, которая создает таблицу / сеанс, я не уверен, почему я получу эту ошибку.

Ценю помощь в решении.

Хранимая процедура:

 ALTER PROCEDURE usp_returnReadBook
    @DateStart DATETIME = NULL,
    @DateEnd DATETIME = NULL
AS
    INSERT INTO #tempRead
        EXECUTE [dbo].[usp_line] @DateStart,@DateEnd   

    INSERT INTO #tempRead
        EXECUTE [dbo].[usp_line2] @DateStart,@DateEnd

    SELECT * FROM #tempRead
 

Вызывающая процедура:

 EXEC [dbo].usp_returnReadBook @DateStart = N'2020/08/01',@DateEnd = N'2020/12/01'
 

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

С уважением

Комментарии:

1. Отложенное разрешение имен позволит создавать процедуры. Эта таблица должна существовать во время выполнения, чего не происходит, и вызывает ошибку выполнения во время выполнения (и для дальнейшего использования — всегда публикуйте точное и полное сообщение об ошибке). Учитывая задействованные имена, кажется, что это может быть проблемой XY

Ответ №1:

Вам необходимо определить #temp table:

 ALTER PROC usp_returnReadBook
   @DateStart DATETIME = NULL,
   @DateEnd DATETIME = NULL
AS
BEGIN
  CREATE TABLE #tempRead(col1 type1, col2 type2); 

  INSERT INTO #tempRead(col1, col2) EXECUTE [dbo].[usp_line]  @DateStart,@DateEnd;  
  INSERT INTO #tempRead(col1, col2) EXECUTE [dbo].[usp_line2] @DateStart,@DateEnd;
  SELECT * FROM #tempRead;
END
 

Определение таблицы должно соответствовать выводам хранимой процедуры.