Tabelas temporárias

Tabelas Temporárias, como o próprio nome sugere, são tabelas utilizadas para armazenamento provisório de dados. Muito utilizadas no desenvolvimento, principalmente em ETLs.

Esse tipo de tabelas são criadas no database TempDB e podem ser classificadas em Locais e Globais:

  • Tabelas Temporárias Locais são criadas com o prefixo “#” e possuem visibilidade restrita para a conexão responsável por sua criação, ou seja, outras conexões não “enxergam” a tabela. Essas tabelas são excluídas quando o usuário desconectar da instancia do SQL Server.
  • Tabelas Temporárias Globais são criadas com o prefixo “##” e são visíveis por todas as conexões, são excluídas quando todos os usuários que referenciaram a tabela se desconectarem.

Há ainda uma alternativa para as temp tables que são as variáveis do tipo table essas variáveis fazem a mesma coisa que uma tabela temporária, porém em memória, não registra no TempDB, se por um lado isso torna o processamento muito rápido também é limitado a quantidade de memória disponível no servidor.

Como criar

O script abaixo cria uma tabela de escopo local com duas colunas.

    create table #temp (   
cdcliente
int,
nmcliente varchar(20)
)

Usando

O script que segue faz uma inserção na tabela e seleciona registros.

      insert into #temp (cdcliente, nmcliente ) values (1, 'Rodrigo')
GO
select * from #temp

Como dropar

Para excluir a tabela basta o commando drop table, mas para validar a sua existencia utilize o nome com o tempdb.

   if object_id('tempdb.dbo.#temp') is not null drop table #temp 

Para concluir vou deixar algumas dicas para melhorar o uso das tabelas temporárias

  • Tenha certeza que o banco de dados TempDB tenha estrutura para comportar
  • Quando criar uma temp table nunca utilizar o select into para fazer a carga de dados, prefira utilizar Insert Into.
  • Depois de usar a temp table a exclua, mesmo que seja desconectado o usuário se algum processo ficar pendurado você estará garantindo que liberará espaço do tempodb.
  • Evite criar tabelas temporárias com controle de transação, isso irá fazer o lock de algumas system tables (syscolumns, sysindexes, syscomments).

Abraço, Rodrigo

Deixe uma resposta

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.