Criando tabelas temporárias no SQL Server (Parte 2)

     Para não perder a prática, vou tecer mais algumas observações sobre criação de tabelas, no post anterior falei sobre tabela temporária, local (na seção aberta) ou global (para outras seções alem da atual), agora é a vez de tabelas do tipo variável.

Exemplo:

DECLARE  @Tabela TABLE
(
  codigo smallint not null,
  nome varchar(20)
)
     

     A grosso modo, a mesma não deixa de ser uma tabela temporária, pois após o seu uso é removida automaticamente, quer dizer que é criada apenas dentro do escopo (uma procedure ou batch), sua utilização é estritamente local.

    Variáveis do tipo "table" ou tabelas do tipo variável, provocam menos recompilações em procedures, utilizam menos recursos de log e de bloqueio, operações com as mesmas são minimamente locadas e isso pode ser considerado como ganho de perfomance.

Não é permitido para variáveis do tipo "table":

  • Alteração da estrutura da tabela;
  • Criação de índices não-clusters;
  • Criação de constraints check ou default;
  • Criação ou atualização de estatísticas;
  • Não pode ser o destino de um Select into;
  • Não são afetadas por reversões de transações, rollback nem pensar.


Pesquisando descobri que as mesmas também usam recursos da tempdb e para pequenos volumes de dados, tanto a tabela temporária quanto a do tipo variável são criadas em memória.

Para poder enxergar a tabela na tempdb, temos que utilizar o recurso abaixo, pois a mesma devido a sua natureza, não tem o mesmo nome que definimos para ela, mas sim uma identificação criada pelo próprio SQL Server durante a execução. 

Exemplo:


Declare @TabVar Table (Codigo Int Identity, nome Varchar(10))

Use tempdb;

select C.* 
  from tempdb.sys.columns A
       Inner Join tempdb.sys.Objects B On A.Object_Id = B.Object_id
       Inner Join tempdb.Sys.Tables C On A.Object_Id = C.Object_id
 where A.object_id > 100 
   and A.name = 'nome'



Ela é uma boa pedida para armazenamento transitório de dados em substituição às tabelas temporárias, mas não deve ser utilizada para um volume maior de dados, por exemplo, mais de cem linhas o ideial é usar uma tabela temporária.

Um exemplo mais completo:


Fica mais está dica pessoal, espero que tenham compreendido.





Referências:


Comentários