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!