Do que se trata o artigo

Este artigo refere-se à utilização de recursos próprios do SQL Server para se trabalhar temporariamente com dados. Desta forma, são apresentadas as tabelas temporárias e as variáveis de tabela, bem como a forma de utilização e as características de cada uma.

Em que situação o tema útil

O conteúdo deste artigo é útil para elucidar a forma de se trabalhar com tabelas temporárias e variáveis de tabela, em situações nas quais o desenvolvedor precisa manipular temporariamente os dados a fim de obter o resultado pretendido. Além disso, este artigo é importante na hora de decidir o recurso a ser utilizado.

Resumo DevMan

O SQL Server oferece recursos próprios para se trabalhar temporariamente com informações, de forma que não é necessário utilizar tabelas físicas para este fim. Assim sendo, as tabelas temporárias e as variáveis de tabela, com suas características e particularidades, costumam ser os meios mais eficientes. Contudo, não há uma regra pré-estabelecida que permita saber de antemão o melhor recurso a ser utilizado. Isto dependerá de cada cenário e são as devidas simulações de bases de produção que dirão qual opção deverá ser escolhida.

Quando se torna necessário criar um relatório ou apresentar informações em alguma espécie de consulta, por exemplo, muitas vezes são estes os passos seguidos: resgatam-se as informações necessárias da base de dados, manipulam-se as mesmas (a fim de apresentá-las de uma maneira diferente de como se encontram e até mesmo de gerar novas informações a partir dos dados que se tem), apresenta-se o resultado ao usuário e, em seguida, descarta-se a “manipulação” realizada, uma vez que ela não deverá ser persistida no banco.

Um erro comum neste cenário é utilizar tabelas físicas para atender a esta necessidade. Dessa forma, os desenvolvedores criam estas tabelas (físicas), carregam os dados, fazem as manipulações necessárias, utilizam as informações e depois apagam as tabelas físicas que foram criadas. Mas por que fazer isso (utilizar tabelas físicas de modo temporário) se o SQL Server disponibiliza meios próprios de se trabalhar com dados temporários?

O grande problema de se utilizar tabelas físicas para este intuito é o “desgaste” que isso causa para o SQL, pois ele acaba registrando (logando) desnecessariamente várias informações em relação às operações que estão sendo executadas nestas tabelas. Além disso, as estatísticas também serão atualizadas e a própria base de produção crescerá. Ou seja, para muitas das coisas que fazemos explicitamente, o SQL Server faz tantas outras de forma implícita, oculta aos nossos olhos, e que sempre possuem certo custo, isto é, um overhead para o banco.

Neste contexto, neste artigo serão abordadas as opções que o SQL oferece para se trabalhar temporariamente com informações, bem como as vantagens e desvantagens de cada uma delas.

Tabelas temporárias

O conceito de tabelas temporárias é simples, pelo nome já sabemos, são tabelas utilizadas para armazenamento temporário de dados. Isso quer dizer que funcionam como uma tabela normal, porém, são “dropadas”automaticamente após o encerramento da conexão. Se funcionam como tabelas normais, elas ocupam espaço em disco, se ocupam espaço em disco significam que estão no HD, se estão no HD significam que o desempenho cai, já que o processador precisa buscar os dados e “jogar” na memória RAM e todo aquele conceito de paginação de sistemas operacionais.

Algumas das principais características das tabelas temporárias são:

- São armazenadas no database tempdb;

- São visíveis apenas enquanto a conexão que está ativa;

- São removidas após o encerramento da conexão;

- Podem ser locais ou globais.

Existe no SQL Server o recurso de tabelas temporárias, que são divididas em dois tipos: globais e locais. A sintaxe de criação delas é a mesma e o que as difere (na criação) é somente a quantidade de tralhas (#) que compõem o nome da tabela: se ela for criada com duas #, será considerada uma tabela global; se for criada com uma # apenas, será considerada uma tabela temporária local. Logo, ##TabelaProduto é uma tabela global, enquanto #TabelaProduto é uma tabela local.

Quando o usuário cria uma tabela temporária local, esta fica acessível apenas para este usuário e na conexão em que ela foi criada. Consequentemente, caso não ocorra a exclusão da tabela explicitamente, fatalmente isto ocorrerá quando o usuário se desconectar da instância do SQL Server ou encerrar a conexão de criação da tabela. E já que a tabela temporária local é restrita à conexão que a criou, é possível gerar tabelas locais com o mesmo nome, em conexões diferentes. Já a tabela temporária global é acessível a qualquer usuário e só é destruída quando a última conexão que estiver consultando-a terminar o processamento.

...
Quer ler esse conteúdo completo? Tenha acesso completo