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: Alteração da estrutura da tabela; Criação de índices não-cluster; Criação de constraints CHECK, DEFAULT; Criação e/ou atualização de estatísticas; 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!