Tabelas temporárias - Local x Global

Neste post, quero apresentar um recurso interessante do SQL Server: as tabelas temporárias globais.

Talvez você já conheça o recurso de criação de tabelas temporárias: usando o caracter  # (hastag, ou antigamente, sustenido) ao criar uma tabela prefixada por este caracter, os dados inseridos nesta tabela poderão ser visíveis durante toda a conexão que está trabalhando. Esta tabela somente existe para a conexão atual. Ao finalizar, a tabela deixará de existir.

O que talvez ainda não conheça é que se usar dois caracteres ##, sua tabela será global, ou seja, todas conexões abertas poderão enxergá-la.

Na figura 1, a conexão 1 está criando 3 tabelas temporárias: #Tmp_Local, ##Tmp_Global, #Tmp_Local_2.


Figura 1 - Criação das tabelas temporárias na conexão 1

Ao visualizar as tabelas criadas (figura 2), todos os resultados são visualizados.

Figura 2 - Visualização das tabelas temporárias na conexão 1

Na figura 3, a conexão 2 está criando apenas 1 tabela temporária: #Tmp_Local. Observe agora (na mesma figura), que a visualização da tabela #Tmp_Local são os registros selecionados nesta conexão 2. Contudo, é possível também visualizar os registros da tabela ##Tmp_Global da conexão 1, mas não os registros da tabela #Tmp_Local_2 da conexão 1.

Figura 3 - Visualização das tabelas temporárias na conexão 2

As tabelas temporárias globais funcionam como uma comunicação entre conexões ao passo que as temporárias locais somente são resultados do trabalho da própria conexão. A tabela temporária global é destruída automaticamente quando a conexão que a criou é fechada.

Eu recomendo fortemente o uso de tabelas temporárias locais, até por uma questão de performance em rotinas gerais dentro do SQL Server. No caso de tabelas temporárias globais elas são úteis para um suporte técnico de transferência de registros em conexões distintas. Não recomendo o uso em rotinas fixas, pois não saberia quando que a conexão que a criou foi destruída. Mas não deixa de ser um recurso muito útil para manutenções dos dados.

Abaixo, segue o código que descrevi nas figuras.



-- >>> CONEXÃO 1

-- 1a - Criação da temporária local conexão 1
Select top 10 * 
Into #Tmp_Local 
From Swd_Produtos

-- 1b - Criação da temporária global pela conexão 1
Select top 10 * 
Into ##Tmp_Global 
From Swd_Produtos

-- 1c - Criação da temporária local 2 conexão 1
Select top 10 * 
Into #Tmp_Local_2
From Swd_Produtos

-- Visualização - conexão 1
Select 'Conexão 1 - #Tmp_Local', * 
From #Tmp_Local

Select 'Conexão 1 - ##Tmp_Global', * 
From ##Tmp_Global

Select 'Conexão 1 - #Tmp_Local_2', *  
From #Tmp_Local_2


-- >>> CONEXÃO 2

-- 2a - Criação da temporária local conexão 2
Select top 10 *
Into #Tmp_Local 
From Swd_Produtos
Order by Codigo desc

-- Visualização - conexão 2
Select 'Conexão 2 - #Tmp_Local', * 
From #Tmp_Local

Select 'Conexão 2 - ##Tmp_Glocal (Conexão 1)', * 
From ##Tmp_Global

Select 'Conexão 2 - #Tmp_Local_2 (Conexão 2)', *  
From #Tmp_Local_2


Comentários

Postagens mais visitadas deste blog

Backup compactado

Importação de arquivos CSV

Performance SQL Server - Índices