#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
Определение таблицы должно соответствовать выводам хранимой процедуры.