ID do artigo: 305977 - Última revisão: quinta-feira, 29 de março de 2007 - Revisão: 6.3

INF: Perguntas freqüentes - SQL Server 2000 - variáveis de tabela

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Expandir tudo | Recolher tudo

Sumário

Este artigo responde algumas da perguntas freqüentes (FAQs) relacionados às variáveis tabela que são introduzidas no SQL Server 2000.

Para ler a descrição nos manuais online do SQL Server de variáveis de tabela, visite o seguinte site:
http://msdn2.microsoft.com/en-us/library/aa260638(SQL.80).aspx (http://msdn2.microsoft.com/en-us/library/aa260638(SQL.80).aspx)

Mais Informações

T1: por que variáveis de tabela apresentadas quando tabelas temporárias já estavam disponíveis?

A1: Variáveis de tabela têm as seguintes vantagens sobre tabelas temporárias:
  • Como mencionado no artigo "Tabelas" nos manuais online do SQL Server, variáveis de tabela, como variáveis locais, têm um escopo bem definido no final dos quais eles são limpas automaticamente.
  • Variáveis de tabela resultam em menos recompilações de um procedimento armazenado em comparação com a tabelas temporárias.
  • Transações que envolvem variáveis de tabela última somente para a duração de uma atualização na variável de tabela. Portanto, variáveis de tabela requerem menor bloqueio e recursos de log. Como variáveis de tabela têm escopo limitado e não fazem parte do banco de dados persistente, Reversões de transações não afetam-los.
Q2: o que significa dizendo que variáveis de tabela resultar em menos recompilações de um procedimento armazenado que quando as tabelas temporárias são usadas?

A2: O seguinte artigo discute alguns motivos quando procedimentos armazenados são recompilados:

243586  (http://support.microsoft.com/kb/243586/ ) Solucionando problemas de recompilação de procedimento armazenado
A seção "Recompilações conclusão para determinados temporários tabela Operations" também lista alguns requisitos para evitar como uma recompilação devido a tabelas temporárias. Essas restrições não se aplicam a variáveis de tabela.

Variáveis de tabela são completamente isoladas para o lote não cria-las assim nenhuma resolução está ' deve ocorrer quando uma instrução CREATE ou ALTER ocorre, que pode ocorrer com uma tabela temporária. Tabelas temporárias precisam essa resolução está ' para a tabela pode ser referenciada em um procedimento armazenado aninhado. Variáveis de tabela evitar isso completamente para que procedimentos armazenados podem usar o plano que já é compilado, economizando recursos para processar o procedimento armazenado.

T3: o que são algumas das desvantagens das variáveis de tabela?

A3: Estas são algumas das desvantagens em comparação com a tabelas temporárias:
  • Índices não-clusterizados não podem ser criados em variáveis de tabela, seja os índices do sistema que são criadas para uma restrição UNIQUE ou primário. Que pode influenciar o desempenho de consulta quando comparado a uma tabela temporária com índices não clusterizados.
  • Variáveis de tabela não mantêm estatísticas como pode tabelas temporárias. Não é possível criar estatísticas no variáveis tabela por meio da criação automática ou usando a instrução CREATE STATISTICS. Portanto, para consultas complexas em tabelas grandes, a falta de estatísticas pode deter o otimizador para determinar o melhor plano para uma consulta, portanto, afetar o desempenho dessa consulta.
  • A definição da tabela não pode ser alterada após a instrução DECLARE inicial.
  • Variáveis de tabelas não podem ser usadas em uma instrução INSERT EXEC ou SELECT INTO.
  • Restrições CHECK, valores padrão e colunas calculadas na declaração de tipo de tabela não podem chamar funções definidas pelo usuário.
  • Você não pode usar a instrução EXEC ou o procedimento sp_executesql armazenado para executar uma consulta SQL Server dinâmica que se refere a uma variável de tabela, se a variável de tabela foi criada fora a instrução EXEC ou o procedimento sp_executesql armazenados. Como variáveis de tabela podem ser referenciadas no seu escopo local apenas, uma instrução EXEC e sp_executesql armazenados procedimento seria fora do escopo da variável de tabela. No entanto, você pode criar a variável de tabela e executar todo o processamento dentro de instrução EXEC ou sp_executesql porque o procedimento armazenado e as variáveis tabela escopo local está em instrução EXEC ou sp_executesql procedimento armazenado.
Q4: são variáveis de tabela somente de memória estruturas que são garantidas o melhor desempenho comparado ao tabelas temporários ou permanentes, porque eles são mantidos em um banco de dados que reside o disco físico?

A4: Uma variável de tabela não é uma estrutura somente de memória. Como uma variável de tabela pode armazenar mais dados que pode caber na memória, ele deve ter um local no disco para armazenar dados. As variáveis de tabela são criadas no banco de dados tempdb semelhante a tabelas temporárias. Se a memória estiver disponível, ambos tabela variáveis e tabelas temporárias são criadas e processadas enquanto na memória (cache de dados).

Q5: eu precise usar o variáveis de tabela em vez de tabelas temporárias?

A5: A resposta depende esses três fatores:
  • O número de linhas que são inseridos para a tabela.
  • O número de recompilações que a consulta é salva da.
  • O tipo de consultas e a dependência em índices e estatísticas de desempenho.
Em algumas situações, é útil dividir um procedimento armazenado com tabelas temporárias em menores procedimentos armazenados para que recompilação ocorre em unidades menores.

Em geral, você usa variáveis de tabela sempre que possível, exceto quando existe um volume significativo de dados e há uso repetido da tabela. Nesse caso, você pode criar índices na tabela temporária para aumentar o desempenho da consulta. No entanto, cada cenário pode ser diferente. A Microsoft recomenda que você teste se variáveis de tabela são mais úteis que tabelas temporárias para uma determinada consulta ou procedimento armazenado.

Não encontrou uma resposta à sua pergunta? Visite os grupos de notícias Microsoft SQL Server em: Microsoft SQL Server Newsgroups (http://www.microsoft.com/communities/newsgroups/en-us/default.aspx?dg=microsoft.public.sqlserver.server)

Comentários sobre este ou outros artigos da Base de dados de Conhecimento do Microsoft SQL Server? Soltar uma anotação SQLKB@Microsoft.com (mailto:sqlkb@microsoft.com) -em SQLKB@Microsoft.com

A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 2000 Standard Edition
Palavras-chave: 
kbmt kbfaq kbinfo KB305977 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 305977  (http://support.microsoft.com/kb/305977/en-us/ )