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!
Daniel medaglia
Legal mando bem....por isso foi meu professor na faculdade....
Um abraço..
marcelo
Excelente explicação. Fácil compreensão. Bom artigo.
Sérgio Rodrigo
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).
2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.