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