Při spuštění dotazu obsahuje velký počet argumentů uvnitř klauzule NOT IN SQL Server nebo IN dojde k přetečení zásobníku

Překlady článku Překlady článku
ID článku: 288095 - Produkty, které se vztahují k tomuto článku.
Chyba #: 235727 (shiloh_bugs)
Chyba #: 58274 (sqlbug_70)
Rozbalit všechny záložky | Minimalizovat všechny záložky

Příznaky

Dotazy obsahující velký počet argumentů (tisíce) uvnitř klauzule NOT IN nebo IN může způsobit přetečení zásobníku. Například následující dotaz výsledkem přetečení zásobníku:
SELECT max(au_id) FROM authors WHERE au_id IN(1,2,5,......,11571)  
-- Query contains over 11570 arguments.
				
protokolu chyb serveru SQL Server obsahuje informace podobné následujícímu dojde k přetečení zásobníku:
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.................
				
SQL Server v některých případech může ve skutečnosti vypnutí z důvodu přetečení zásobníku.

Jak potíže obejít

Přepište dotaz a obsahují hodnoty v seznamu IN namísto použití klauzule IN použít tabulku # Temp. Například může být předchozí dotaz re-written takto:
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)
				

Prohlášení

Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny na začátku tohoto článku.

Další informace

Klient není odpojen však může dojít chybová zpráva:
Zpráva serveru: 8621, Level 17 1 stav linky 2 interní chyba Query procesor: procesor dotazu nedostatek místa zásobníku během optimalizace dotazu.

Vlastnosti

ID článku: 288095 - Poslední aktualizace: 2. listopadu 2007 - Revize: 4.4
Informace v tomto článku jsou určeny pro produkt:
  • 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
Klíčová slova: 
kbmt kbprb kbpending KB288095 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:288095

Dejte nám zpětnou vazbu

 

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