Início Variáveis do tipo TABLE
Alexandre Curvelo 4 de janeiro de 2016 Comente! SQL Server
Neste artigo veremos como trabalhar com variáveis do tipo table no SQL Server, quais são as vantagens e desvantagens de sua utilização no dia a dia.
Muitos não conhecem ou não utilizam as variáveis do tipo TABLE, que pode auxiliar o dia a dia do DBA quando necessita mover dados. Há muito questionamento ao redor de sua utilização, uns preferem utilizar views, tabelas temporárias, mas não vou colocar fogo nessa disputa, somente veremos como utiliza-la e um pouco do que ela pode ou não pode fazer.
Então vamos ao cenário.
É comum no dia a dia trabalharmos com tabelas temporárias (mas do que views) para transportarmos dados, geralmente em procedures é muito comum encontrarmos essa utilização e o que muitos não conhecem é que podemos declarar uma variável do tipo TABLE, na qual podemos inserir e transportar dados como se estivéssemos utilizando uma tabela comum.
Podemos ainda nesta variável do tipo TABLE utilizar instruções DML (INSERT, UPDATE, DELETE, SELECT), da mesma forma que é feito em uma tabela comum, claro que existem algumas desvantagens mas primeiro vamos comentar as suas vantagens:
1- Uma variável table se comporta como uma variável local. Ela tem um escopo bem definido. Ela é a função, o procedimento armazenado ou o lote em que está declarada.
2- Dentro de seu escopo, uma variável table pode ser usada como uma tabela comum. Pode ser aplicada em qualquer lugar em que uma tabela ou expressão de tabela for usada em instruções SELECT, INSERT, UPDATE e DELETE. Porém, table não pode ser usada na seguinte instrução:
3- As variáveis table são automaticamente limpas ao término da função, do procedimento armazenado ou do lote em que estão definidas.
4- As variáveis table usadas em procedimentos armazenados provocam menos recompilações dos procedimentos armazenados do que quando tabelas temporárias são usadas, quando não há opções baseadas no custo que afetem o desempenho.
5- As transações que envolvem variáveis table só existem durante uma atualização na variável table. Portanto, variáveis table requerem menos recursos de LOG e bloqueio.
Fonte: https://msdn.microsoft.com/pt-br/library/ms175010%28v=sql.120%29.aspx?f=255&MSPPError=-2147217396
Agora vamos comentar suas desvantagens:
1- Não gera estatística
2- Não podem utilizar CHECK ou DEFAULT
3- É recomendado que acima de 100 linhas se utilizasse tabela temporária
4- Podem gerar planos de execução ruins (Quase sempre)
Falamos um pouco e agora vamos mostrar sua execução, preparei um script simples e de fácil entendimento.