Developing

Introduçã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. Entretanto, ao invés de serem armazenadas no banco de sistema TEMPDB (onde ficam as tabelas temporárias), são armazenadas em memória.

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.

-- Criando uma variável tipo TABLE
-- Creating TABLE variable
Declare @VarTab TABLE (cod_cliente int, qtde_pedidos int)

-- Manipulando dados numa variável tipo tabela
-- Manipulating data into table variable
-- Insert
Declare @VarTab TABLE(
		ClienteID varchar(10),
		QtdePedidos int
)

Insert into @VarTab
Values (1, 10)

Insert into @VarTab
Values (2, 2)

Insert into @VarTab
Values (3, 5)

Select * from @VarTab

-- Update
Update @VarTab
   set QtdePedidos = QtdePedidos + 1

Select * from @VarTab

-- Delete
Delete from @VarTab
 where ClienteID = 1

Select * from @VarTab

-- Executando Join com variável tipo TABLE
-- Executing join with table type variable
Declare @VarTab TABLE (
		ClienteID varchar(10),
		QtdePedidos int
)

Insert into @VarTab
	Select customerId, qtde_pedidos = count(*)
	  from orders
   where customerId like ('v%')
group by customerId
  Select *
    from @VarTab t
inner join customers c
   on t.ClienteID = c.customerId

Conclusão

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.

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.

_____

Não esqueça de deixar seu comentário, critica, elegio, dúvida e etc. Ele é muito importante para a melhoria do blog.

Advertisements

Comments on: "SQL Server – Variáveis Table" (3)

  1. […] SQL Server – Variáveis Table […]

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: