segunda-feira, 22 de abril de 2013

Tabelas Temporárias no SQL Server


Hoje vamos falar de tabelas temporarias no SQL Server, é um assunto bem simples, mais gera muitas dúvidas, principalmente entre desenvolvedores, bom vamos lá, primeiramente vamos conceituar as diferenças entre as tabelas temporárias.
  • Toda tabela temporaria começa com #;
  • Elas estão disponiveis durante a conexão do usuário, ao se desconectar elas são automaticamente excluídas;
  • São armazenadas no TempDB, na pasta de Tabelas Temporarias;
  • Existem dois tipos de tabelas temporárias;
  • Tabelas que estão disponível somente na consulta atual. Quando criamos esta tabela é indicado por uma # no inicio do nome da tabela. Ex. #Teste;
  • Tabelas que estão dísponivel para todas as consultas dentro da sessão do usuário. É inidcado por cerquilhas duplas no inicio do nome da tabela (##). Ex. ##Teste.
Vamos a criação das tabelas de exemplo: Abra o SQL Server Management Studio, logue no seu Banco de Dados, escolha um banco de sua preferência e inicie uma nova consulta. Digite os comandos abaixo:
create table ##teste
(id int identity(1,1),
nome varchar(10))
insert into ##teste (nome) values (‘João’)
insert into ##teste (nome) values (‘Lucas’)
insert into ##teste (nome) values (‘Mateus’)
insert into ##teste (nome) values (‘Isaque’)
insert into ##teste (nome) values (‘Marcio’)
insert into ##teste (nome) values (‘Fernando’)
insert into ##teste (nome) values (‘Carlos’)
insert into ##teste (nome) values (‘Pedro’)
insert into ##teste (nome) values (‘Manuel’)
insert into ##teste (nome) values (‘Joaquim’)
Select id,nome from ##Teste
Clique em F5 ou execute a consulta, o resultado da consulta retornará os dados inseridos acima. Abra uma nova janela de consulta pode ser até com um banco de dados diferente. Escreva esta parte da consulta e a execute.
Select id,nome from ##Teste
Você ainda verá um resultado idêntico a primeira consulta. Isto acontece por que usamos duas cerquilhas no inicio do nome da tabela, que faz com que a tabela temporária em toda nossa sessão independente da consulta em si. Agora vamos criar uma outra tabela temporária,mais com apenas uma cerquilha, vamos a ação
create table #teste
(id int identity(1,1),
nome varchar(10))
insert into #teste (nome) values (‘João’)
insert into #teste (nome) values (‘Lucas’)
insert into #teste (nome) values (‘Mateus’)
insert into #teste (nome) values (‘Isaque’)
insert into #teste (nome) values (‘Marcio’)
insert into #teste (nome) values (‘Fernando’)
insert into #teste (nome) values (‘Carlos’)
insert into #teste (nome) values (‘Pedro’)
insert into #teste (nome) values (‘Manuel’)
insert into #teste (nome) values (‘Joaquim’)
select * from #teste
Rodando esta consulta perceberemos que será mostrado os dados que foram inseridos. Agora vamos abrir uma nova janela de consulta identico ao que fizemos anteriormente e rodaremos somente a parte da consulta que contem a instrução Select.
select * from #teste
A consulta não será efetuada retornando a mensagem de erro:
Msg 208, Level 16, State 0, Line 1
Invalid object name ‘#teste’.
Isto ocorre pois a nossa tabela com uma cerquilha esta disponível apenas para a consulta na qual ela foi criad