terça-feira, 28 de fevereiro de 2012

SQL Server - 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!

0 comentários:

Postar um comentário

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Eagle Belt Buckles