Pretečenie zásobníka vyskytuje po spustení dotazu, ktorý obsahuje veľký počet argumentov vo vnútri v alebo nie v klauzule v SQL Server

Preklady článku Preklady článku
ID článku: 288095 - Zobraziť produkty, ktorých sa tento článok týka.
BUG #: 235727 (shiloh_bugs)
BUG #: 58274 (sqlbug_70)
Rozbaliť všetko | Zbaliť všetko

PRIZNAKY

Dotazy, ktoré obsahujú veľký počet argumentov (v tisícoch) vnútri IN alebo nie v klauzule môže vygenerovať pretečenie zásobníka. Napríklad, nasledovný dotaz výsledky v pretečenie zásobníka:
SELECT max(au_id) FROM authors WHERE au_id IN(1,2,5,......,11571)  
-- Query contains over 11570 arguments.
				
Denník chýb servera SQL Server obsahuje informácie podobné nasledujúcim, keď sa vyskytne pretečenie zásobníka:
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.................
				
V niektorých prípadoch sa server SQL Server môže skutočne vypnutie z pretečenie zásobníka.

RIEŠENIE

Prepísať dotaz a použiť #temp tabuľku, ktorá obsahuje hodnoty v zozname namiesto pomocou klauzuly. Napríklad, predchádzajúceho dotazu možno re-písomné takhle:
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)
				

STAV

Spoločnosť Microsoft potvrdila, že ide o problém, ktorý sa týka produktov spoločnosti Microsoft uvedených na začiatku tohto článku.

DALSIE INFORMACIE

Klient neodpojí, ale toto chybové hlásenie sa môže vyskytnúť:
Server: Msg 8621, úroveň 17, štát 1, Linka 2 Vnútorná chyba procesora dotaz: Dotaz procesor běžel von z miesta v zásobníku počas Optimalizácia dotazu.

Vlastnosti

ID článku: 288095 - Posledná kontrola: 24. októbra 2011 - Revízia: 2.0
Informácie v tomto článku sa týkajú nasledujúcich produktov:
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Enterprise Edition
  • Microsoft SQL Server 2000 Personal Edition
  • Microsoft SQL Server 2000 Developer Edition
  • Microsoft SQL Server 2000 Standard Edition
Kľúčové slová: 
kbprb kbpending kbmt KB288095 KbMtsk
Strojovo preložené
DÔLEŽITÉ: Tento článok bol preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft, nie prekladateľom. Spoločnosť Microsoft ponúka články preložené prekladateľmi aj strojovo preložené články, vďaka čomu máte možnosť prístupu ku všetkým článkom databázy Knowledge Base vo svojom jazyku. Strojovo preložený článok však nie je vždy perfektný. Môže obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky, podobne ako cudzinec môže robiť chyby, keď rozpráva vašim jazykom. Spoločnosť Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené akýmkoľvek nepresným prekladom obsahu alebo jeho použitím zo strany zákazníkov. Spoločnosť Microsoft softvér na strojový preklad pravidelne aktualizuje.
Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem:288095

Odošlite odozvu

 

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