Capacidade excedida da pilha ocorre quando executa uma consulta que contenha um grande número de argumentos no interior de um IN ou uma cláusula NOT IN no SQL Server

Traduções de Artigos Traduções de Artigos
Artigo: 288095 - Ver produtos para os quais este artigo se aplica.
Erro n.º: 235727 (shiloh_bugs)
Erro n.º: 58274 (sqlbug_70)
Expandir tudo | Reduzir tudo

Sintomas

Consultas que contêm um grande número de argumentos (milhares) dentro de um IN ou uma cláusula IN não podem gerar uma sobrecarga de pilha. Por exemplo, a seguinte consulta resulta numa sobrecarga de pilha:
SELECT max(au_id) FROM authors WHERE au_id IN(1,2,5,......,11571)  
-- Query contains over 11570 arguments.
				
registo de erros O SQL Server contém informações semelhantes às seguintes quando ocorre o excesso de pilha:
2000-08-10 12:02:37.87 spid51    08/10/00 12:02:37 Stack Overflow Dump not possible - Exception c00000fd E at 0x00587286
2000-08-10 12:02:37.87 spid51    Address=587286 Exception Code = c00000fd
2000-08-10 12:02:37.87 spid51    eax=195922d0 ebx=19592338 ecx=2ad0e938 edx=00000007
2000-08-10 12:02:37.87 spid51    esi=196ce2c8 edi=19592180 eip=00587286 esp=2ac93000
2000-08-10 12:02:37.87 spid51    ebp=2ac93028 efl=00010202
2000-08-10 12:02:37.87 spid51    cs=1b ss=23 ds=23 es=23 fs=38 gs=0
2000-08-10 12:02:37.87 spid51    1: Return Address 00587286
2000-08-10 12:02:37.87 spid51    2: Return Address 0058728B.................
				
Em alguns casos, SQL Server pode, na realidade, encerramento como resultado da sobrecarga de pilha.

Como contornar

Rescrever a consulta e utilize uma tabela #temp para contêm os valores na lista IN em vez de utilizar uma cláusula in. Por exemplo, a consulta precedente pode ser re-written assim:
CREATE TABLE #IN_values (au_id char(4))
INSERT INTO #IN_values select au_id FROM Table_with_values_123456789...

SELECT max(au_id)
FROM authors as A
JOIN #IN_values as I ON (A.au_id = I.au_id)
				

Ponto Da Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados no início deste artigo.

Mais Informação

O cliente não estiver desligado, mas esta mensagem de erro pode ocorrer:
Erro de servidor: 8621, 17 de nível 1 de estado, erro de processador de consultas interno linha 2: O processador de consultas ficou sem espaço na pilha durante a optimização de consulta.

Propriedades

Artigo: 288095 - Última revisão: 2 de novembro de 2007 - Revisão: 4.4
A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Desktop Engine (Windows)
  • Microsoft SQL Server 2000 Enterprise Edition
  • Microsoft SQL Server 2000 Personal Edition
  • Microsoft SQL Server 2000 Developer Edition
  • Microsoft SQL Server 2000 Standard Edition
Palavras-chave: 
kbmt kbprb kbpending KB288095 KbMtpt
Traduçã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: 288095

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com