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

Autor: SQLCrespi

Rodrigo Crespi é MVP Data Platform, MCT, MCSE, MCSA, MCIT, MCDBA e MCP em SQL Server, possuí outras certificações em .NET Framework, Dynamics CRM e etc. Iniciou trabalhando com SQL Server na versão 6.5 na época como desenvolvedor, logo direcionou a sua carreira para a área de administração de bancos de dados. Atualmente é Sócio da CrespiDB – Soluções em Plataformas de Dados, além de professor universitário na Uniftec – Caxias do Sul Autor de diversos artigos publicados em sites e revistas sobre SQL Server e engenharia de software, mantem o canal SQLCrespi no Youtube, o blog SQLCrespi, além de ser dedicado ao SQL Server RS PASS Chapter Leader do grupo de profissionais em SQL Server do Rio Grande do Sul.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s