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


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

4 117

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 или соединение (означает одного пользователя), который создал таблицы. Это автоматически удаляется, когда сеанс, создавший таблицы имеет был закрыт. Локальное имя временной таблицы просматривается с помощью single хэш ("#") знак.

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 соединение.