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

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: sexta-feira, 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