Локальные и глобальные временные таблицы в SQL Server

в чем разница между локальными и глобальными временными таблицами в SQL Server?

4 ответов


Я нахожу это объяснение вполне ясным (это чистая копия из в TechNet):

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


  • таблица переменных (DECLARE @t TABLE) видны только для соединения, которое его создает, и удаляются, когда пакет или хранимая процедура заканчивается.

  • локальные временные таблицы (CREATE TABLE #t) видны только соединение, которое создает его и удаляется, когда соединение закрытый.

  • глобальные временные таблицы (CREATE TABLE ##t) видны всем, и удаляются, когда все соединения, которые ссылались на них, были закрыты.

  • постоянные таблицы Tempdb (USE tempdb CREATE TABLE t) видны все, и удаляются при перезапуске сервера.


цитирование из книг в Интернете:

локальные временные таблицы видны только в текущем сеансе; глобальные временные таблицы видны всем сессиям.

временные таблицы автоматически удаляются, когда они выходят за рамки, если явно не удаляются с помощью DROP TABLE:

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

1.) локальная временная таблица существует только для продолжительности соединения или, если определено внутри составного оператора, для продолжительности составного оператора.

локальные временные таблицы доступны только для сеанса SQL Server или соединение (означает одного пользователя), создавшего таблицы. Это автоматически удаляется, когда сеанс, создавший таблицы был закрыт. Локальная временная таблица смотрел один хэш ("#") знак.

CREATE TABLE #LocalTemp
(
 UserID int,
 Name varchar(50), 
 Address varchar(150)
)
GO
insert into #LocalTemp values ( 1, 'Name','Address');
GO
Select * from #LocalTemp

область локальной временной таблицы существует для текущего сеанса текущего пользователь означает текущее окно запроса. Если вы закроете текущий окно запроса или открыть новое окно запроса и попытается найти выше созданная временная таблица, она даст вам ошибку.


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

глобальные временные таблицы доступны для всех сеансов SQL Server или соединения (означает всех пользователей). Они могут быть созданы любым SQL Пользователей подключение к серверу и они автоматически удаляются, когда все соединения SQL Server были закрыты. Глобальная временная таблица имя смотрится с двойным хэшем ("##") знак.

CREATE TABLE ##GlobalTemp
(
 UserID int,
 Name varchar(50), 
 Address varchar(150)
)
GO
insert into ##GlobalTemp values ( 1, 'Name','Address');
GO
Select * from ##GlobalTemp

глобальные временные таблицы видны всем соединениям SQL Server в то время как локальные временные таблицы видны только текущему SQL Server соединение.