Использование временной таблицы между хранимыми процедурами в SQL Server 2008

В настоящее время у меня есть основная хранимая процедура, вызывающая много хранимых процедур:

Main --| 
     --|
       --| > Exec Pre-processing SP (create and populate #temp table)
     --|
       --| > Exec Actual update
     --|
       --| > Exec Post-Process (consume and drop #temp table)

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

Я не могу изменить сигнатуры хранимых процедур или основной хранимой процедуры.

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

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

2 ответа

Решение

Вам нужно создать временную таблицу выше в иерархии вызовов, чем все хранимые процессы, которые ее используют. Поскольку вы говорите, что не можете изменить MainЕдинственный шанс сделать это будет создать новую внешнюю процедуру, которая создает #temp а потом звонит Main,

Затем вы можете изменить предварительную процедуру, чтобы заполнить уже существующую таблицу. Вам не нужно явно отбрасывать таблицу в любом месте.


Кроме того, вы можете создать постоянную таблицу и включить столбец spid, в котором указано, из каких данных подключения были вставлены данные. Вы также должны убедиться, что любые операции выбора / удаления в этой таблице снова используют @@SPID значение. Я опубликовал это как ответ на глобальные временные таблицы Session

Если main процедура всегда выполняется в одном потоке и никогда не будет вызываться параллельно из нескольких соединений, вы можете объявить вашу временную таблицу как глобальную временную таблицу (##temp в отличие от #temp), предполагая, что вы можете изменить внутреннюю процедуру.

Это не сработает, если main вызывается из нескольких соединений одновременно.

Другие вопросы по тегам