Variáveis Table no SQL Server 2000
por Reydeval Rocha
Olá Pessoal!
Continuando a linha de artigos rápidos e úteis mostraremos hoje o recurso de variáveis table no SQL Server 2000.
Variáveis Table
Variáveis table são um tipo de dados especial. Pode-se através deste tipo, declarar variáveis locais que armazenam conjuntos de resultados para processamento posterior. Funcionam como uma tabela temporária. Entretanto, ao invés de serem armazenadas no banco de sistema TEMPDB (onde ficam as tabelas temporárias), são armazenadas em memória. As restrições do uso de variáveis table são em comandos SELECT/INTO e INSERT/EXEC.
Usar variáveis table em stored procedures gera menos recompilações do que as versões usando tabelas temporárias. Além disso, como as variáveis são armazenadas em memória, geram menos retenção no TEMPDB. Isso faz com que o SQL Server gaste menos recursos com locking. A recomendação é: use variáveis table, ao invés de tabelas temporárias, sempre que possível. Como as variáveis table possuem escopo local, são destruídas tão logo a stored procedure, o trigger ou o script onde forem definidas finalizar.
Vamos a um exemplo de utilização de variáveis table. A procedure abaixo declara uma variável table, preenche-a com valores e em seguida realiza um select. Este simples exemplo mostra que a utilização das variáveis table é muito semelhante ao uso de tabelas temporárias.
Vejamos o cenário abaixo:
--Criação de stored procedure para demonstração do uso de variáveis table
create procedure up_usa_variavel_table
as
--Declaração da variável table
declare @ltb_tabela1 table(codigo integer identity,
objeto varchar(100),
tipo varchar(100))
--Populando a variável table com dados da SYSOBJECTS
insert into @ltb_tabela1(objeto, tipo)
select name,
case xtype
when 'P' then 'Procedure'
when 'U' then 'Tabela de Usuário'
when 'S' then 'Tabela de Sistema'
when 'FN' then 'Função'
when 'X' then 'Procedure Estendida'
when 'PK' then 'Chave Primária'
when 'FK' then 'Chave Estrangeira'
when 'F' then 'Chave Estrangeira'
when 'V' then 'Visão'
when 'C' then 'Constraint Check'
when 'D' then 'Constraint Default'
else 'Tipo desconhecido'
end
from sysobjects
order by 2
--Realizando um select na variável table da mesma forma que numa tabela regular
select * from @ltb_tabela1
go
exec up_usa_variavel_table
Conclusão
Apresentamos um útil recurso visando a diminuição das retenções no TEMPDB além da melhoria de desempenho de stored procedures e triggers. As variáveis table são tão úteis quanto tabelas temporárias e devem ser usadas sempre que possível. Até a próxima!