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.
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
Select top 10 *
From Swd_Produtos
-- 1b - Criação da temporária global pela conexão 1
Select top 10 *
From Swd_Produtos
Select top 10 *
From Swd_Produtos
From #Tmp_Local
From ##Tmp_Global
From #Tmp_Local_2
Select top 10 *
Into #Tmp_Local
From Swd_Produtos
Order by Codigo desc
From #Tmp_Local
From ##Tmp_Global
From #Tmp_Local_2
Comentários
Postar um comentário