Хранимая процедура с использованием глобальных временных таблиц из-за динамического SQL

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

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

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

1 ответ

Это развивает комментарий Фликера. Документация:

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

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

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

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