تخطي إلى المحتوى الرئيسي
الدعم
تسجيل الدخول باستخدام حساب Microsoft
تسجيل الدخول أو إنشاء حساب.
مرحباً،
تحديد استخدام حساب مختلف!
لديك حسابات متعددة
اختر الحساب الذي تريد تسجيل الدخول باستخدامه.

الأعراض

تعرف User-Defined Functions (UDFs) التي يتم تنفيذها في Transact-SQL والتي ترجع قيمة بيانات واحدة باسم T-SQL Scalar User-Defined Functions (UDFs). 

تم تقديم ميزة Inlining UDF العددية في Microsoft SQL Server 2019. يمكن لهذه الميزة تحسين أداء الاستعلامات التي تستدعي T-SQL Scalar UDFs حيث يكون تنفيذ UDF هو الازدحام الرئيسي. تحويل T-SQL Scalar UDF Inlining تلقائيا إلى تعبيرات ارتباطية. 

يتضمن هذا التحديث التراكمي (CU) العديد من الإصلاحات عبر المناطق التالية للسيناريوهات التي قد يرجع فيها الاستعلام الذي يستخدم تحليل UDF العددي رسالة خطأ أو نتائج غير متوقعة:

  • يحدث خطأ عدم تطابق النوع إذا كان نوع إرجاع UDF sql_variant (تمت إضافته في SQL Server 2019 CU2).

  • يلغي استدعاء UDF منsp_executesqlالتنفيذ (تمت إضافته في SQL Server 2019 CU2).

  • ترجع UDFs التي تشير إلى التسميات بدون أمر GOTO مقترن نتائج غير صحيحة (تمت إضافتها في SQL Server 2019 CU2).

  • تحدث حالات نفاد الذاكرة وتسرب الذاكرة بسبب UDFs عددية كبيرة جدا (تمت إضافتها في SQL Server 2019 CU2).

  • تتسبب المتغيرات غير المهيئت المستخدمة في حالة (IF-ELSE) في حدوث أخطاء (تمت إضافتها في SQL Server 2019 CU2).

  • يحدث خطأ تحويل صريح إذا كان UDF يحتوي على المعلمة sql_variant(تمت إضافتها في SQL Server 2019 CU7).

  • يحدث الخطأ إذا كانت الدالة العددية تشير إلى CHECKSUM(تمت إضافتها في SQL Server 2019 CU7).

  • يمكن أن يتسبب استدعاء UDF الذي يحتوي على العديد من عمليات إعادة تقييم التعبير العددي في حدوث خطأ مجدول غير منتج (تمت إضافته في SQL Server 2019 CU7).

    ملاحظة: قد يتسبب إصلاح هذه المشكلة في بعض الأحيان في تراجع الأداء. للتخفيف من تراجع الأداء هذا، يمكنك تعطيل الإصلاح الأصلي عن طريق تشغيل علامة التتبع (TF) 13156.

    تعمل Microsoft على إصلاح تراجع الأداء هذا الذي سيكون متوفرا في وحدة CU مستقبلية.

  • يحدث خطأ إذا كان الاستعلام المرجعي UDF يستخدم OPTION (RECOMPILE)(تمت إضافته في SQL Server 2019 CU7).

  • تحدث أخطاء الأذونات إذا استدعت طرق العرض UDFs غير المضمنة (تمت إضافتها في SQL Server 2019 CU9).

  • تحدث انتهاكات الوصول إذا تم استخدامquery_tsql_scalar_udf_inlinedXEvent (تمت إضافتها في SQL Server 2019 CU9).

  • يحدث سلوك غير متناسق لأن تحليل UDF العددي لا يحترم تلميح الاستعلام QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n(تمت إضافته في SQL Server 2019 CU9).

  • يحتوي دمج UDFs على تجميعات يمكن أن تتسبب في أخطاء مجدول غير منتجة (تمت إضافتها في SQL Server 2019 CU9).

  • تحدث أخطاء نفاد الذاكرة بسبب تسلسل العمليات العددية على نفس المتغير في الكتل الشرطية (تمت إضافتها في SQL Server 2019 CU9).

  • بعد الترقية إلى CU9، يحدث انتهاك وصول إذا استدعى عنصر UDF غير مضمن عددي (UDF1) يحتوي على UDF مضمن عددي (UDF2) يستخدم كمعلمة إدخال (تمت إضافته في SQL Server 2019 CU11).

  • قد يؤدي ربط UDFs إلى حدوث أخطاء وإنشاء رموز خطأ 6846 و1011 و107 (تمت إضافتها في SQL Server 2019 CU11).

  • قد يؤدي ربط UDFs التي تعمل كحساب غير مسؤول إلى إرجاع رسالة الخطأ، "حدث خطأ فادح في الأمر الحالي.  يجب تجاهل النتائج، إن وجدت، " (تمت إضافتها في SQL Server 2019 CU16).

  • يحدث انتهاك الوصول إذا تم استدعاء جداول مؤقتة داخل UDFs باستخدام المرادفات (تمت إضافتها في Microsoft SQL Server 2022 CU1 و SQL Server 2019 CU19).

  • يحدث انتهاك الوصول إذا كان تعريف UDF يحتوي على تسميات GOTO فقط وعلامهRETURN (تمت إضافتها في SQL Server 2022 CU1 و SQL Server 2019 CU19).

  • ترجع UDF العددية نتائج بتنسيقات تاريخ ووقت مختلفة عند تشغيل ميزة تحليل UDF العددي (تمت إضافتها في SQL Server 2022 CU3 SQL Server 2019 CU20).

  • يتم إنشاء ملف تفريغ إذا كان استعلام يحتوي على عبارة GROUP BY يستخدم UDFs غير مدمجة في عبارة SELECT بدون دالة تجميعية (تمت إضافتها في SQL Server CU12 و SQL Server 2019 CU26).

  • حدث الخطأ "تم تجاوز الحد الأقصى للإجراء المخزن أو الدالة أو المشغل أو عرض مستوى التداخل (الحد 32)" إذا تم تشغيل ميزة تحليل UDF العددي، حتى إذا لم يتم تجاوز مستوى التداخل (تمت إضافته في SQL Server 2022 CU12 و SQL Server 2019 CU26).

  • يحدث تلف الذاكرة في sqllang.dll!CProchdr::FDeriveInlineabilityOfScalarUdf إذا كانت ميزة Inlining UDF العددية قيد التشغيل (تمت إضافتها في SQL Server 2022 CU12 و SQL Server 2019 CU26).

يمنع هذا التحديث التراكمي أيضا التحليل في السيناريوهات التالية:

  • إذا كان UDF يشير إلى بعض الوظائف المضمنة (على سبيل المثال، @@ROWCOUNT) التي قد تغير النتائج عندما تكون UDF مضمنة (تمت إضافتها في SQL Server 2019 CU2).

  • عند تمرير الدالات التجميعية كمعلمات إلى UDF عددي (تمت إضافته في SQL Server 2019 CU2).

  • إذا كانت UDF تشير إلى طرق العرض المضمنة (على سبيل المثال: OBJECT_ID) (تمت إضافتها في SQL Server 2019 CU2).

  • إذا كان UDF يستخدم أساليب XML (تمت إضافتها في SQL Server 2019 CU4).

  • إذا كان UDF يحتوي على عبارة SELECTتستخدم عبارةORDER BYولكن ليس TOP 1(تمت إضافتها في SQL Server CU4 2019).

  • إذا كانت عبارةSELECT تنفذ واجبا مع عبارة ORDER BY (على سبيل المثال، SELECT @x = @x +1 FROM table ORDER BY column_name) (تمت إضافتها في SQL Server 2019 CU4).

  • إذا كان UDF يحتوي على عبارات RETURN متعددة (تمت إضافتها في SQL Server 2019 CU5).

  • إذا تم استدعاء UDF من عبارة RETURN (تمت إضافتها في SQL Server 2019 CU5).

  • إذا كانت UDF تشير إلى الدالة STRING_AGG (تمت إضافتها في SQL Server 2019 CU5).

  • إذا كان تعريف UDF يشير إلى الجداول البعيدة (تمت إضافتها في SQL Server 2019 CU6).

  • إذا كان استعلام استدعاء UDF يستخدم GROUPING SETSأو CUBEأو ROLLUP (تمت إضافته في SQL Server 2019 CU6).

  • إذا كان استعلام استدعاء UDF يحتوي على متغير يستخدم كمعلمة UDF للتعيين (على سبيل المثال، SELECT @y=2, @x=UDF(@y)) (تمت إضافته في SQL Server 2019 CU6).

  • إذا كانت UDF تشير إلى أعمدة مشفرة (تمت إضافتها في SQL Server 2019 CU11).

  • إذا كان UDF يحتوي على مراجع إلى WITH XMLNAMESPACES(تمت إضافتها في SQL Server 2019 CU11).

  • إذا كان الاستعلام الذي يستدعي UDF يحتوي على تعبيرات جدول شائعة (CTEs) (تمت إضافتها في SQL Server 2019 CU11).

  • إذا كان تعريف UDF يحتوي على جداول مؤقتة أو مرادفات للجداول المؤقتة (تمت إضافتها في SQL Server 2022 CU1 SQL Server 2019 CU19).

  • إذا كان تعريف UDF يحتوي على عبارةSELECTمع عبارةDISTINCTعلى أعمدة تعيين متعددة (تمت إضافتها في SQL Server 2022 CU4 و CU20 SQL Server 2019).

  • إذا كان UDF يحتوي على عبارة SELECT تستخدم عبارة TABLESAMPLE PERCENT وتعيينات متغيرة متعددة (تمت إضافتها في SQL Server 2022 CU7).

  • إذا كان هناك استعلام INSERT موجود في جدول تمت الإشارة إليه بواسطة طريقة عرض مفهرسة تحتوي على UDF (تمت إضافته في SQL Server 2022 CU12 SQL Server 2019 CU26).

بعد الترقية إلى SQL Server CU2 2019، ولكن قبل الترقية إلى SQL Server 2019 CU5، يجب إعادة تقييم ما إذا كان UDF مؤهلا للتحيم. للقيام بذلك، قم بتحديث UDFs العددية المؤهلة من خلال أي من الطرق التالية:

  • قم بتشغيل sp_refreshsqlmodule لUDFs العددية القابلة للتطبيق. لمزيد من المعلومات حول هذا الإجراء المخزن للنظام، راجع sp_refreshsqlmodule (Transact-SQL).

  • قم بتغيير أو إعادة إنشاء UDF العددي الحالي باستخدام التعريفات والأذونات الموجودة وتعيين الخصائص. لمزيد من المعلومات، راجع ALTER FUNCTION (Transact-SQL).

ينشئ الأمر التالي برنامج نصي لتحديث بيانات التعريف لأي UDFs عددية موجودة:

/*

Generates a script that can be used to refresh all active inlineable scalar UDFs.

Note The sp_refreshsqlmodule command does not affect any permissions, extended properties, or SET options that are associated with the object.

*/

SELECT 'EXECUTE sys.sp_refreshsqlmodule ''[' + OBJECT_SCHEMA_NAME(object_id) + +'].' + '[' + OBJECT_NAME(object_id)

+ ']'';' AS 'RefreshStatement'

FROM sys.sql_modules

WHERE is_inlineable = 1

AND inline_type = 1;

GO

ملاحظة: بعد الترقية إلى SQL Server 2019 CU5، سنستأنف تلقائيا اشتقاق قابلية تحديد UDF أثناء التحويل البرمجي.

الحل

تم تصحيح هذه المشكلة في التحديثات التراكمية التالية SQL Server:

يحتوي كل تحديث تراكمي جديد SQL Server على جميع الإصلاحات العاجلة وجميع إصلاحات الأمان التي تم تضمينها مع التحديث التراكمي السابق. اطلع على آخر التحديثات التراكمية SQL Server:

الحالة

أكدت Microsoft أن هذه مشكلة في منتجات Microsoft المدرجة في قسم "ينطبق على".

المراجع

تعرف على المصطلحات التي تستخدمها Microsoft لوصف تحديثات البرامج.

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

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

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

تساعدك المجتمعات على طرح الأسئلة والإجابة عليها، وتقديم الملاحظات، وسماعها من الخبراء ذوي الاطلاع الواسع.

هل كانت المعلومات مفيدة؟

ما مدى رضاك عن جودة اللغة؟
ما الذي أثّر في تجربتك؟
بالضغط على "إرسال"، سيتم استخدام ملاحظاتك لتحسين منتجات Microsoft وخدماتها. سيتمكن مسؤول تكنولوجيا المعلومات لديك من جمع هذه البيانات. بيان الخصوصية.

نشكرك على ملاحظاتك!

×