Criando tabelas temporárias no SQL Server (Parte 1)

Olá pessoal, 

     Estava pesquisando algumas coisas relacionadas a OPENROWSET e me deparei com alguns artigos falando sobre tabelas temporárias, achei bacana, porque eu mesmo não sabia muito a respeito, com isso fiquei motivado a estudar o assunto e fazer um artigo "HowTo".

Seguinte, todo mundo (que entende um pouco de SQL) sabe que para criar uma tabela num banco de dados é necessário fazer da seguinte forma (bem simples no SQL Server):

Create table nome_da_tabela (
   campoID int ,
   campoString varchar(50),
   campoDate date
)


ou 

Select  campoID , campoString , campoDate  into [nova_tabela] from [nome_da_tabela]

(neste caso foi criada uma tabela a partir de uma outra existente no banco já populada)

     Porém temos a seguinte situação: supondo que já se tenha um banco estruturado e populado com dados,    banco este que não pode ficar sendo alterado a todo momento, então em determinadas ocasiões há a necessidade de se criar uma tabela para armazenar determinados dados que serão processados e gravados no próprio banco ou apenas exibidos para o usuário. Para isso tem-se o recurso de criar tabelas temporárias que atenderão a essa finalidade.

Tem-se então os tipos de tabelas temporárias identificadas por:
#nome_da_tabela (local)
##nome_da_tabela (global)
@nome_da_tabela

Então qual usar? Para tal pergunta é bom saber qual a utilidade de cada uma.

#nome_da_tabela: 
Este caso é o mais comum de se ver em um script SQL, é uma tabela temporária local, como assim local? porque ela só pode ser enxergada pela instrução SQL dentro da transação aberta.
Este tipo de tabela temporária é criada dentro do banco tempdb do SQL Server.

Exemplo:

--criação da tabela temporária
Create table #nome_da_tabela (
   campoID int ,
   campoString varchar(50),
  campoDate date
)


ou dando um Select com a opção <into> em uma tabela qualquer de um banco de dados, neste exemplo foi usado o banco AdventureWorks da Microsoft.


ou dando um Select com a opção <into> em uma tabela qualquer de um banco de dados e ainda definindo os tipos.


para vermos as suas propriedades depois de criada, executamos a stored procedure do SQL Server, sp_help:
exec tempdb..sp_help #nome_da_tabela


onde:
exec: executa a stored procedure;
Tempdb: é um dos bancos de dados do sistema no SQL Server;
sp_help: é a stored procedure que vai ser executada;
#nome_da_tabela: já diz tudo, é a tabela que será exibida as informações.

Bom, a partir do momento em que a tabela está criada, a mesma já pode ser populada normalmente como qualquer outra tabela do banco de dados, a mesma ainda pode receber índices.
Quando a transação atual for fechada, a mesma desaparecerá.

Tabelas temporárias trabalham bem com grandes quantidades de dados, já para poucas informações, o aconselhável é trabalhar com tabelas de variáveis, tabelas essas que serão vistas no próximo artigo.

Dando um Select na tabela temporária (os dados são originários da tabela Person.Contact do banco de dados AdventureWorks).


Caso queira acabar com a mesma antes de fechar a conexão basta dar um Drop como é feita para deletar qualquer outra tabela.

Como disse no inicio do artigo, essa tabela só será enxergada dentro da conexão atual, se outro usuário se conectar ao banco e tentar acessar a tabela, o mesmo não vai conseguir, pois a mesma está de forma local na conexão aberta.


Para que outro usuário possa ter acesso à tabela, a mesma deve ser criada de forma global, isso é feito colocando-se outra "#" (tralha) na frente da mesma, então a tabela vai ficar da seguinte forma: ##nome_tabela.


Agora é possível fazer o select por meio de outra transação.


De forma bem simples, essa foi a explicação de como se criar uma tabela temporária, até a próxima parte do artigo, onde será abordado a criação de tabelas do tipo variável.





Referências:

Comentários