Terça-feira, 29 de novembro de 2005 às 14h25

Entendendo tabelas temporárias

Olá pessoal! Já deixei de ser “calouro”, pois este é o meu segundo artigo no iMasters. Espero um dia chegar ao centésimo, como o grande Mauro Pichiliani!

Vamos ao que interessa então. Várias e várias vezes já vi desenvolvedores criando tabelas no banco de dados, pois precisavam realizar operações complexas sobre alguns dados e isto não dava pra ser feito apenas com uma instrução SQL. Logo, eles armazenavam estes dados nas tabelas e realizavam operações sobre eles. Não que isto seja errado, contudo estas tabelas ocupam espaço do banco de dados e ficam lá quando não são mais necessárias.

O SQL Server tem um recurso extremamente interessante pra quem tem esse tipo de problema: as tabela temporárias.

Tabelas temporárias são tabelas que existem apenas durante a conexão com o banco de dados. Ou seja, quando a conexão é encerrada, a tabela é automaticamente eliminada. Resumindo, estas tabelas resolvem o problema do desenvolvedor, que consegue armazenar os dados e não aporrinha o DBA. As tabelas temporárias têm as seguintes características:

- Não são armazenadas no database de produção. Ao invés disso, elas são armazenadas no database de sistemas tempdb;
- Seus nomes são iniciados com #;
- São visíveis apenas ao usuário da conexão;
- São eliminadas quando a conexão é encerrada.

Então vamos à prática!

Todos os comandos de criação, alteração e exclusão da tabela são os mesmos de tabelas normais (CREATE TABLE, ALTER TABLE e DROP TABLE). Por exemplo:

--Criando uma tabela temporária
CREATE TABLE #Temp(Codigo INT NULL, Nome VARCHAR(40) NULL)

Comandos para os dados também são exatamente iguais, ou seja, INSERT, UPDATE, DELETE e SELECT.

--Inserindo um registro na tabela temporária
INSERT INTO #Temp VALUES(1, ‘Lawrence’)

Na figura abaixo são demonstradas algumas das propriedades da tabela temporária. Temos duas conexões no Query Analyser (cada janela aberta no Query Analyser é uma conexão diferente). Na primeira conexão foram executados os comandos acima e realizado um comando SELECT para exibir o conteúdo completo da tabela, o qual retorna apenas a linha inserida. Na segunda conexão foi realizado apenas o comando SELECT, que retornou erro, pois o SQL Server não encontrou a tabela temporária #Temp para aquela conexão.

Outra propriedade interessante a ser mostrada sobre as tabelas temporárias é que elas podem ser criadas com o mesmo nome em conexões diferentes, que uma não interferirá na outra (isso uma tabela normal no banco de dados de produção não pode fazer). Na figura abaixo foi criada a tabela temporária #Temp nas duas conexões e inseridos registros diferentes. Perceba que uma não interfere com a outra.

O SQL Server consegue realizar este controle, pois no banco tempdb não é criada uma tabela simplesmente com o nome #Temp e sim #Temp concatenado com um identificador. Para conferir as propriedades da tabela, basta usar os seguintes comandos:

--Obtendo propriedades da tabela temporária
USE tempdb
EXECUTE SP_HELP #Temp

Para finalizar, existe um caso especial de tabela temporária, dita global. São tabelas que tem as mesmas propriedades de uma tabela temporária normal, contudo várias conexões podem enxergá-las. A única diferença é que seu nome inicia com duplo #. Confira o exemplo na figura.

--Criando uma tabela temporária global
CREATE TABLE ##Tempglobal(Codigo INT NULL, Nome VARCHAR(40) NULL)

Vale lembrar que, como qualquer outra tabela temporária, ela é excluída no momento que a conexão, que a criou, é encerrada.

Bom pessoal, espero que tenham gostado do artigo. No próximo pretendo juntar o de cursores com este em uma aplicação prática. Um grande abraço a todos!

5 comentários

 bruno torres viana
30/11/2005 17h44

É isso mesmo.

Muito bom...

 Daniel medaglia
01/12/2005 02h15

Ta mandando...

Legal mando bem....por isso foi meu professor na faculdade....
Um abraço..

 marcelo
01/12/2005 09h50

Otimo Exemplo.

Excelente explicação. Fácil compreensão. Bom artigo.

 Sérgio Rodrigo
08/12/2005 10h49

e tem mais

Também se pode criar tabelas temporárias iguais a outras tabelas no momento do select: TIpo assim
SELECT *
INTO #TEMP
FROM TABELAX
Esse código cria (sem precisar de comando create) uma tabela temporária igual a TABELAX (com os mesmos campos e registros).

 Alan Hidalgo
22/03/2007 08h51

POST

Excelente post!
Valeu!

Cancelar resposta

Qual a sua opinião?

Faça login abaixo ou cadastre-se rapidamente.


2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.