تجاوز سعة مكدس الذاكرة المؤقتة تحدث عند تشغيل استعلام الذي يحتوي على عدد كبير من الوسيطات داخل IN أو جملة IN NOT في SQL Server

هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية

اضغط هنا لرابط المقالة باللغة الانجليزية288095
تمت أرشفة هذه المقالة. وتظهر "كما هي" ولن يتم تحديثها بعد الآن.
BUG #: 235727 (shiloh_bugs)
BUG #: 58274 (sqlbug_70)
الأعراض
قد تؤدي الاستعلامات التي تحتوي على عدد كبير من الوسيطات (آلاف) داخل IN أو جملة IN NOT تجاوز سعة مكدس. على سبيل المثال، ينتج الاستعلام التالي تجاوز سعة مكدس:
SELECT max(au_id) FROM authors WHERE au_id IN(1,2,5,......,11571)  -- Query contains over 11570 arguments.				
سجل أخطاء SQL Server يحتوي على معلومات مشابهة لما يلي عند حدوث تجاوز سعة المكدس:
2000-08-10 12:02:37.87 spid51    08/10/00 12:02:37 Stack Overflow Dump not possible - Exception c00000fd E at 0x005872862000-08-10 12:02:37.87 spid51    Address=587286 Exception Code = c00000fd2000-08-10 12:02:37.87 spid51    eax=195922d0 ebx=19592338 ecx=2ad0e938 edx=000000072000-08-10 12:02:37.87 spid51    esi=196ce2c8 edi=19592180 eip=00587286 esp=2ac930002000-08-10 12:02:37.87 spid51    ebp=2ac93028 efl=000102022000-08-10 12:02:37.87 spid51    cs=1b ss=23 ds=23 es=23 fs=38 gs=02000-08-10 12:02:37.87 spid51    1: Return Address 005872862000-08-10 12:02:37.87 spid51    2: Return Address 0058728B.................				
في بعض الحالات، قد SQL Server بالفعل إيقاف التشغيل نتيجة تجاوز سعة المكدس.
الحل البديل
إعادة كتابة الاستعلام واستخدام جدول #temp تحتوي على القيم في قائمة IN بدلاً من استخدام جملة IN. على سبيل المثال، يمكن أن الاستعلام السابق re-written مثل هذا:
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 AJOIN #IN_values as I ON (A.au_id = I.au_id)				
تصريح
أقرت Microsoft أن هذه مشكلة في منتجات Microsoft المسردة في بداية هذه المقالة.
معلومات أخرى
لم يتم قطع اتصال العميل ولكن قد تظهر رسالة الخطأ هذه:
رسالة ملقم: 8621 ، 17 مستوى حالة 1، 2 خط خطأ معالج الاستعلام داخلي: معالج الاستعلام نفاد مساحة المكدس أثناء تحسين أداء الاستعلام.

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 288095 - آخر مراجعة: 12/06/2015 00:23:41 - المراجعة: 4.4

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

  • kbnosurvey kbarchive kbmt kbprb kbpending KB288095 KbMtar
تعليقات