Artigo: 305977 - Última revisão: quinta-feira, 29 de Março de 2007 - Revisão: 6.3

INF: Frequently Asked Questions - SQL Server 2000 - tabela de variáveis

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 | Reduzir tudo

Sumário

Este artigo responde a algumas das perguntas mais frequentes (FAQ, Frequently Asked Questions) relacionadas com as variáveis de tabela são introduzidas no SQL Server 2000.

Para ler a descrição da tabela variáveis SQL Server Books Online, visite o seguinte Web site da Microsoft:
http://msdn2.microsoft.com/en-us/library/aa260638(SQL.80).aspx (http://msdn2.microsoft.com/en-us/library/aa260638(SQL.80).aspx)

Mais Informação

Q1: por que razão foram tabela variáveis introduzidas quando tabelas temporárias já estavam disponíveis?

A1: Tabela variáveis têm as seguintes vantagens sobre tabelas temporárias:
  • Conforme mencionado no artigo "Tabelas" SQL Server Books Online, variáveis de tabela, tal como variáveis locais, têm um âmbito bem definido no final dos quais que são automaticamente limpas.
  • Tabela variáveis resultam em recompilações menos de um procedimento armazenado comparado com a tabelas temporárias.
  • Transacções que envolvam última tabela variáveis apenas para a duração de uma actualização na variável de tabela. Assim, variáveis de tabela requerem menos bloquear e registo de recursos. Uma vez que as variáveis de tabela têm âmbito limitado e não fazem parte da base de dados persistente, anulação de alterações de transacção não irão afectá-los.
Q2: o que significa dizendo que tabela variáveis resultar em recompilações menos de um procedimento armazenado que quando são utilizadas as tabelas temporárias?

A2: O seguinte artigo aborda algumas das razões quando procedimentos armazenados são novamente compilados:

243586  (http://support.microsoft.com/kb/243586/ ) Resolução de problemas recompilation do procedimento armazenado
A secção "Recompilações por determinadas temporários tabela operações" lista também alguns requisitos para evitar tal como um recompilation devido a tabelas temporárias. Estas restrições não se aplicam às variáveis de tabela.

Tabela variáveis estão completamente isoladas para o lote cria-los por isso, não está a resolução de ' tem de ocorrer quando uma instrução CREATE ou ALTER tem lugar, que poderão ocorrer com uma tabela temporária. Necessita de tabelas temporárias esta resolução está ' para a tabela pode ser referenciada a partir de um procedimento armazenado aninhado. Tabela variáveis evitar esta situação completamente para que procedimentos armazenados podem utilizar o plano que já está compilado, poupando recursos para processar o procedimento armazenado.

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

A3: Estas são algumas das desvantagens quando comparado com a tabelas temporárias:
  • Impossível criar índices não agrupados nas variáveis de tabela, que não os índices de sistema que dizem respeito a uma restrição PRIMARY ou exclusivo. Que pode influenciar o desempenho das consultas quando comparado com uma tabela temporária com índices não agrupados.
  • Tabela variáveis não pretende manter estatísticas como tabelas temporárias podem. Impossível criar estatísticas na tabela variáveis através da criação automática ou utilizando a instrução CREATE STATISTICS. Por conseguinte, para consultas complexas em tabelas grandes, a falta de estatísticas poderá deter o optimizador para determinar o melhor plano para uma consulta, assim, afectar o desempenho da consulta.
  • A definição da tabela não pode ser alterada depois da instrução DECLARE inicial.
  • Variáveis de tabelas não podem ser utilizadas numa instrução INSERT EXEC ou SELECT INTO.
  • CHECK restrições, valores de predefinição e calculadas colunas na tabela tipo declaração não podem chamar funções definidas pelo utilizador.
  • Pode utilizar a instrução de execução ou o procedimento armazenado sp_executesql executar uma consulta de SQL Server dinâmica que se refere uma variável de tabela, se a variável de tabela criada fora a instrução de execução ou o procedimento sp_executesql armazenados. Porque a tabela variáveis podem ser referenciadas no respectivo âmbito local, uma instrução de execução e sp_executesql armazenados procedimento seria fora do âmbito da variável de tabela. No entanto, pode criar a variável de tabela e efectuar todo o processamento dentro de instrução EXEC ou em seguida sp_executesql porque o procedimento armazenado, as variáveis da tabela de âmbito local estiver a instrução de execução ou sp_executesql procedimento armazenado.
P4: são variáveis de tabela estruturas só de memória que estão a garantia de um melhor desempenho quando comparado com a tabelas temporárias ou permanentes, porque estas são mantidas numa base de dados que reside num disco físico?

A4: Uma variável de tabela não é uma estrutura de memória. Uma vez que uma variável de tabela pode conter mais dados que cabem na memória, tem de ter um espaço no disco para armazenar dados. Tabela de variáveis são criadas na base de dados tempdb semelhante às tabelas temporárias. Se está disponível memória, ambas as variáveis da tabela e tabelas temporárias são criadas e processadas na memória (cache de dados).

P5: É necessário utilizar variáveis de tabela em vez de tabelas temporárias?

A5: A resposta depende destas três factores:
  • O número de linhas que são inseridos à tabela.
  • O número de recompilações que a consulta é guardada no.
  • O tipo de consultas e respectiva dependência em índices e estatísticas de desempenho.
Em algumas situações, dividir um procedimento armazenado com tabelas temporárias em procedimentos armazenados mais pequeno para que recompilation ocorra em unidades mais pequenas é útil.

Em geral, utilizar a tabela variáveis sempre que possível, excepto quando existe um volume significativo de dados e é repetida utilização da tabela. Nesse caso, pode criar índices da tabela temporária para aumentar o desempenho das consultas. No entanto, cada cenário poderão ser diferente. A Microsoft recomenda que teste se variáveis tabela mais úteis do que as tabelas temporárias para uma determinada consulta ou procedimento armazenado.

Viu uma resposta à pergunta? Visite os newsgroups do 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? Largar-numa nota no SQLKB@Microsoft.com (mailto: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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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/ )