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)
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’)
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
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)
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!