الأعراض

علي جهاز كمبيوتر يعمل بنظام التشغيل Microsoft SQL Server 2008 ، ضع في اعتبارك السيناريوهات التالية.

السيناريو 1

تقوم بتحديد تعبير جدول شائع (CTE) باستخدام جمله WITH. علي سبيل المثال ، يمكنك تشغيل الاستعلام التالي.

WITH common_table_expression AS (SELECT * FROM sys.objects)(SELECT * FROM common_table_expression)

بعد ذلك ، قم بتشغيل هذا الاستعلام.

SELECT *FROM sys.dm_exec_query_statsWHERE statement_start_offset > statement_end_offsetANDstatement_end_offset <> -1

في هذا السيناريو ، تخزن خطه الاستعلام المخزنة مؤقتا لهذا الاستعلام القيم غير الصحيحة statement_start_offset و statement_end_offset. بشكل خاص ، تلاحظ ان القيمة الstatement_end_offset أصغر من قيمه الstatement_start_offset عند sys.dm_exec_query_stats تشغيل طريقه عرض الاداره الديناميكية (دمف). نظرا لهذه المشكلة ، قد يفشل تقرير الأداء عندما يفترض التقرير ان القيمة الstatement_start_offsetه تكون دائما أصغر من قيمه الstatement_stop_offset.

السيناريو 2

تقوم بتحديد تعبير جدول شائع باستخدام جمله WITH ، وتستخدم الخيار أعاده التحويل البرمجي. علي سبيل المثال ، يمكنك إنشاء داله في SQL Server 2008 باستخدام البرنامج النصي التالي.

CREATE FUNCTION function1() RETURNS int ASBEGINDECLARE @x intSET @x=1;WITH common_table_expression AS (SELECT @x AS column1) (SELECT @x=column1 FROM common_table_expression) OPTION(RECOMPILE)RETURN @xEND

عند تشغيل الاستعلام "تحديد dbo.bigtable function1 ()" ، تتلقي رسالة الخطا التالية:

حدث خطا هام في الأمر الحالي. يجب تجاهل النتائج ، إذا كانت هناك.

بالاضافه إلى ذلك ، يمكن ان يحدث هذا الخطا بدون الخيار أعاده التحويل البرمجي إذا كان SQL server بمعدل نقل بيانات ثقيل للخادم.

السيناريو 3

يمكنك تحديد تعبير جدول شائع باستخدام جمله WITH. في العبارة WITH ، يمكنك تحديد جدول غير موجود. علي سبيل المثال ، يمكنك تشغيل الاستعلام التالي.

WITH computed_table (id) AS(SELECT id FROM this_table_does_not_exist) (SELECT id FROM dbo.computed_table) GO

عند تشغيل هذا الاستعلام ، لن تتلقي رسالة خطا للجدول المفقود.

السبب

تحدث هذه المشكلات بسبب عدم القدرة علي معالجه جمله SELECT التي تلي الجملة WITH. تستخدم جمله WITH بناء الجملة التالي.

WITH common_table_expression AS(CTE_query_definition)

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

الحل

معلومات حزمه الخدمة لحل هذه المشكلة ، يجب الحصول علي أحدث حزمه خدمه ل SQL Server 2008. للمزيد من المعلومات، انقر فوق رقم المقالة التالي لعرضها في "قاعدة معارف Microsoft":

968382 كيفيه الحصول علي أحدث حزمه خدمه ل SQL Server 2008

الحل البديل

لحل هذه المشاكل ، يجب أزاله الأقواس من الجملة التي تلي تعبير الجدول الشائع. علي سبيل المثال ، ضع في اعتبارك ما يلي مع العبارة التي تستخدم الأقواس.

WITH common_table_expression AS (SELECT *FROM sys.objects)(SELECT * FROM common_table_expression)

لحل هذه المشاكل ، يمكنك التغيير إلى العبارة التالية التي لا تستخدم هذه الأقواس.

WITH common_table_expression AS (SELECT *FROM sys.objects)SELECT * FROM common_table_expressio

الحالة

أقر Microsoft ان هذه المشكلة في منتجات Microsoft المسرده في القسم "ينطبق علي". تم تصحيح هذه المشكلة أولا في SQL Server 2008 Service Pack 2 (SP2).

مزيد من المعلومات

للحصول علي مزيد من المعلومات حول كيفيه استخدام جمله WITH مع تعبير جدول شائع ، قم بزيارة صفحه MSDN التالية:

مع common_table_expression (اللعمليات-SQL)لمزيد من المعلومات حول sys.dm_exec_query_stats ، قم بزيارة صفحه ويب التالية في MSDN:

sys.dm_exec_query_stats (اللعمليات-SQL)

هل تحتاج إلى مزيد من المساعدة؟

الخروج من الخيارات إضافية؟

استكشف مزايا الاشتراك، واستعرض الدورات التدريبية، وتعرف على كيفية تأمين جهازك، والمزيد.