Home - www.devmedia.com.br

Variáveis tipo TABLE

Definição

Variável tipo TABLE nada mais é do que um tipo especial de variável que pode ser utilizada para armazenamento temporário de dados, de maneira similar a tabelas temporárias.

Vantagens

·         Devido à sua utilização estritamente local, tabelas criadas a partir de variáveis tipo TABLE não consomem recursos para controle de bloqueios;
·         A manipulação de dados em variáveis tipo TABLE é mais eficiente porque essas operações são minimamente logadas (um ROLLBACK após um INSERT não tem efeito em variáveis tipo TABLE);
·         Em função do seu escopo local, procedures que se utilizam de variáveis tipo TABLE estão sujeitas a um número menor de recompilações quando comparadas às tabelas temporárias.

Desvantagens

·         A vida útil de uma tabela criada a partir de uma variável tipo TABLE está limitada ao batch e/ou procedure onde é utilizada;
·         Com variáveis tipo TABLE não é permitido:
§         Criação de índices não-cluster,
§         Criação de constraints CHECK, DEFAULT;
§         Criação e/ou atualização de estatísticas;
§         Alteração da estrutura da tabela;
§         Uma variável tipo TABLE não pode ser o destino de INSERT EXEC ou SELECT
INTO
§         Uma variável tipo TABLE só pode ser referenciada por um comando
SP_EXECUTESQL se a variável for criada.

Utilização

Variáveis tipo TABLE são uma ótima opção para armazenamento transitório de dados, em substituição às tabelas temporárias. Exemplos de utilização:

·         Para criar uma variável tipo TABLE

declare @tab TABLE (cod_cliente int, qtde_pedidos int)

·         Manipulando dados numa variável tipo tabela

declare @tab TABLE (cliente varchar(10), qtde_pedidos int)
insert into @tab
   select customerId, qtde_pedidos=count(*)
   from orders
   where customerId like ('v%')
   group by customerId
select * from @tab
update @tab set qtde_pedidos = qtde_pedidos + 1
delete from @tab
---------------------------------------------------------------------
(3 row(s) affected)
cliente    qtde_pedidos
---------- ------------
VAFFE      11
VICTE      10

VINET      5
(3 row(s) affected)
(3 row(s) affected)
(3 row(s) affected)

·         Executando Join com tabela criada à partir de uma variável tipo TABLE

declare @tab TABLE (cliente varchar(10), qtde_pedidos int)
insert into @tab
   select customerId, qtde_pedidos=count(*)
   from orders
   where customerId like ('v%')
   group by customerId
select *
from @tab t
inner join
    customers c
on t.cliente = c.customerId
---------------------------------------------------------------------(3 row(s) affected)
cliente    razao_social                            
---------- ----------------------------------------
VAFFE      Vaffeljernet
VICTE      Victuailles en stock
VINET      Vins et alcools Chevalier
(3 row(s) affected)

Considerações Finais

Diferentemente do que muitos pensam, variáveis tipo TABLE também consomem recursos do TempDB – na verdade tanto tabelas temporárias quanto variáveis tipo TABLE serão criadas em memória para pequeno volume de dados. O diferencial das tabelas temporárias é o log reduzido, o número baixo de recompilações e o ganho de performance com a ausência do controle de bloqueios.

Conclusão

Variáveis tipo TABLE são uma versão “light” das equivalentes tabelas temporárias e devem ser utilizadas no dia-a-dia para armazenamento temporário de pequenos volumes de dados.

Ficamos por aqui. Até a próxima!

 

 

Paulo Ribeiro (psribeiro@hotmail.com) é Microsoft MCDBA e membro da equipe editorial da SQL Magazine. Atua como DBA sênior em SQL Server na Livraria e Papelaria Saraiva S/A.

  Monitorando deadlocks com Trace Flags    
  Monitorando deadlocks com o Profiler    
  Variáveis tipo TABLE    
  Tabelas Temporárias    
  Subqueries Parte II: Queries correlatas    
  Subqueries – Parte I    
  Gerenciando Bloqueios–Parte II    
  Gerenciando Bloqueios–Parte I    
  Porque qualificar o owner na chamada de stored-procedures    
  Explorando os Tipos de Join – Parte II    
  Explorando os Tipos de Join – Parte I    
  Versões existentes do SQL Server 2000    
  Tuning - Plano de Execução no SQL Server - Parte 4    
  Tuning - Plano de Execução no SQL Server - Parte 3    
  Tuning - Plano de Execução no SQL Server - Parte 2    
  Tuning - Plano de Execução no SQL Server - Parte 1    
  Tuning - Estatísticas de I/O    
  Desfragmentando Índices no SQL Server    
  Procedures Não Documentadas
no SQL Server 2000 Parte 2
   
  Procedures Não Documentadas
no SQL Server 2000.
   
  SQL Server 2005 - YUKON    
  SQL Server 2000: o Contra-Ataque.    
  Boas-Vindas    
     

 

Todos os direitos reservados: DevMedia Group
SQL Magazine - 2004