Utilizando Tabelas Temporárias no SQL Server 2000

 

Autor: Nilton Pinheiro

 

Extraído do site: http://www.mcdbabrasil.com.br

 

O SQL Server permite a criação de tabelas temporárias em tempo de execução. Essas tabelas possuem nomes iniciados pelos caracteres # ou ##. Se uma tabela temporária não for excluída quando o usuário se desconectar ou ao final da execução de uma Stored Procedure, o SQL Server efetua a exclusão da mesma automaticamente.

As Tabelas temporárias não são armazenadas no banco de dados corrente (da aplicação), elas são armazenadas no banco de dados de Sistema chamado TEMPDB. O TEMPDB é um banco de dados compartilhado que é utilizado pelo próprio SQL Server e por todas as bases de dados do servidor em funções como: operações de SORT, OPEN CURSOR, Joins, GROUP BY e armazenamento de tabelas temporárias criadas em tempo de execução.

 

Existem dois tipos de tabelas temporárias:

 

- Tabela Temporária LOCAL: Os nomes de tabelas temporárias locais iniciam-se por #. Essas tabelas somente são acessadas e visualizadas pela conexão que as criou.

 

- Tabela Temporária GLOBAL: Os nomes de tabelas temporárias globais iniciam-se por ##. Estas tabelas são acessadas por qualquer  conexão ativa, mesmo que não sejam concedidas permissões de acesso (GRANT). Isto ocorre porque as tabelas temporárias globais são consideradas como PUBLIC e qualquer conexão aberta no servidor poderá ler, inserir, alterar ou mesmo excluir a tabela. Desta forma, será impossível garantir a confiabilidade e confidencialidade dos dados contidos nela.

 

PRÁTICAS COMUNS E NÃO RECOMENDADAS:

 

- A facilidade de utilização, o uso sem controle e o não conhecimento do volume de dados a serem armazenadas nas tabelas temporárias podem ser prejudiciais para as aplicações. Como descrito acima, as operações realizadas sobre tabelas temporárias são todas executadas no TEMPDB e a concorrência pode causar lentidão em alguns processos ou o travamento do SQL Server, prejudicando coletivamente as aplicações que acessam o servidor.

 

- Joins de tabelas de aplicação com tabelas temporárias sempre serão resolvidas com a utilização de TABLE SCAN.

 

- Utilização de tabelas temporárias globais (##). Como descrito anteriormente, estas tabelas são totalmente vulneráveis e qualquer usuário conectado ao servidor SQL possui acesso total às mesmas, podendo alterar, deletar, inserir, selecionar os dados da tabela ou mesmo excluí-la.

 

MELHORES PRÁTICAS NA UTILIZAÇÃO DE TABELAS TEMPORÁRIAS

 

- Sempre que possível utilize tabelas fixas em sua própria base de dados (TBapxxxx_TMP);

- Quando não for possível a utilização de tabelas fixas, utilize as Tabelas Temporárias Locais (#) pois são mais seguras;

- Insira somente as linhas necessárias na tabela temporária, evitando inserir mais do que algumas dezenas de linhas;

- Em alguns casos, quando a tabela temporária for utilizada em Joins com tabelas de sua aplicação, crie índice na PK da tabela temporária.

 

Para saber mais sobre tabelas procure temporary tables no Books Online do SQL Server 2000.