Когда глобальные временные таблицы уничтожаются в SQL Server?
Я запутался в использовании глобальной временной таблицы. Я создал глобальную временную таблицу
// Сессия 52: Сессия разработчика
Create Table ##temp(i int) Insert Into ##temp(i) Values(1),(2),(3) Select * From ##temp
// Сессия 56
Select * From ##temp
// Сессия 57: последняя сессия, в которой содержится аргумент ## temp
Select * From ##temp
Теперь, если я закрываю сеанс 52, таблица ## temp уничтожает.
Я считаю, что глобальная временная таблица выпущена в следующих случаях
- Он явно удаляется на любых сеансах
- Сеанс создания закрыт, и нет других сеансов, ссылающихся на этот сеанс.
Я смущен о сессиях, ссылающихся на этот сеанс (сеанс творца), что это значит?
Из CREATE TABLE
:
Глобальные временные таблицы автоматически отбрасываются, когда сеанс, который создал таблицу, заканчивается, и все остальные задачи перестали ссылаться на них. Связь между задачей и таблицей поддерживается только для жизни одного оператора Transact-SQL. Это означает, что глобальная временная таблица отбрасывается при завершении последнего оператора Transact-SQL, который активно ссылался на таблицу при завершении сеанса создания
Хотя в качестве личного набора nit-pick я использовал бы вместо того, чтобы в последнем предложении.
Таким образом, в вашем примере сеанс 57 сохраняет глобальную временную таблицу до тех пор, пока она фактически выполняет оператор, который опирается на таблицу. Как только это утверждение будет завершено, так что сеанс переместился на другой оператор или сидит без дела – глобальная таблица temp будет удалена.
Глобальные временные таблицы уничтожаются только тогда, когда текущий пользователь отключен, и все сеансы, относящиеся к нему, закрыты. Это означает, что глобальная таблица temp не будет уничтожена, если все сеансы, связанные с пользователем (создателем сеанса), не будут закрыты.