الأعراض
علي جهاز كمبيوتر يعمل بنظام التشغيل 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: