0

В настоящее время у нас есть запрос, который прогнозирует доход для продуктов с прямым дебетом. Этот запрос использует постоянные таблицы, противоположные темповым таблицам, поскольку запрос использует динамические SQL и временные таблицы, которые не могут быть замечены за пределами выполнения этого динамического SQL-исполнения.Сохраненная процедура с использованием глобальных временных таблиц из-за динамического SQL

Что я хочу сделать, это поместить их в хранимую процедуру, используя глобальные временные таблицы, чтобы обойти проблему вне сферы с помощью временных таблиц. Мой вопрос в том, что они никогда не запускаются параллельно и только последовательно удаляются эти глобальные таблицы temp после того, как хранимая процедура запускается, как обычные временные таблицы? Или потому, что они глобальные, они останутся в tempdb?

Также обратите внимание, что я рассмотрел метод вставки в таблицу, но, к сожалению, в соответствии с моим комментарием ниже мы используем около 1000 таблиц для создания окончательного вывода.

+0

Существуют альтернативы глобальным временным таблицам, например, использование 'insert. , , exec'. Возможно, вы захотите рассмотреть другие решения. –

+0

Привет, я не могу сделать так, чтобы это было сложно. Сам запрос генерирует таблицу за каждый месяц года за предыдущий доход за 12 лет. Тогда у нас есть 7 различных товарных линий, так что 7 * 12 * 12 так много маленьких таблиц. К сожалению, это то, что я унаследовал и не создал сам. – Jackt153

+0

Я где-то читал (не помню): если вы создаете глобальную таблицу temp, таблица будет доступна для других сеансов ТОЛЬКО, пока ваше соединение не будет живым. Если вы отключитесь и NO ONE находится в середине чтения данных из этой таблицы, таблица упадет. Это означает, что если вы отключите, тот, кто читает таблицу форм, успешно завершит свою операцию, и таблица упадет сразу после того, как все остальные сеансы ничего не сделают с таблицей. Я проверил это, и это правда. – FLICKER

ответ

0

Это подробное описание комментария Фликкера. documentation является:

Глобальные временные таблицы автоматически удаляются, когда сеанс , сотворивший концы таблицы и все другие задачи перестали ссылки на них. Связь между задачей и таблицей поддерживается только для жизни одного оператора Transact-SQL. Этот означает, что глобальная временная таблица будет удалена по завершении последней инструкции Transact-SQL, которая активно ссылалась на таблицу при завершении сеанса создания.

Следовательно, они, кажется, делают то, что вы хотите.

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