KB4538581 - تصحيح: مشاكل 2019 Scalar UDF في SQL Server 2019

الأعراض

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

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


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

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

  • يجهض sp_executesql UDF التنفيذ (المضاف في Microsoft SQL Server 2019 CU2)

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

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

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

  • خطأ تحويل صريح إذا كان UDF SQL_VARIANT معلمة (Microsoft SQL Server CU7 2019)

  • خطأ مرفوع عند إشارة الدالة scalar إلى الدالة CHECKSUM (Microsoft SQL Server CU7 2019)

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

  • خطأ مرفوع عندما يستخدم استعلام الإشارة UDF OPTION (RECOMPILE) (المضافة في Microsoft SQL Server 2019 CU7)

  • أخطاء الأذونات التي يتم رفعها عند استدعاء طرق العرض لمستندات UDF (مضافة في Microsoft SQL Server 2019 CU9)

  • انتهاكات Access التي تحدث عند استخدام XEvent query_tsql_scalar_udf_inlined (المضافة في Microsoft SQL Server 2019 CU9) 

  • سلوك غير متناسق بسبب عدم احترام Scalar UDF Inlining تلميح الاستعلام "QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n" (المضاف في Microsoft SQL Server 2019 CU9)

  • تحتوي UDFs الواصفة على تجميعات قد ينتج عنها خطأ مجدول غير عائد (مضاف في Microsoft SQL Server 2019 CU9) 

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

  • يمكن أن يحدث انتهاك Access عند استدعاء كائن ل UDF (UDF1) عددي قابل للتكرار مع UDF (UDF2) عددي (UDF2) يتم استخدامه كمعلمة إدخال بعد الترقية إلى CU9 (المضافة في Microsoft SQL Server 2019 CU11)

  • قد ينتج عن UDFs الواصفة خطأ مع رموز الخطأ التالية 6846 و1011 و107 (المضافة في Microsoft SQL Server 2019 CU11)


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

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

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

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

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

  • إذا احتوى UDF على SELECT مع ORDER BY بدون "TOP 1" (مضافة في Microsoft SQL Server 2019 CU4)

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

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

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

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

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

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

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

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

  • إذا احتوى UDF على مراجع إلى 'WITH XMLNAMESPACES' (مضافة في Microsoft SQL Server 2019 CU11)

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


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

  • تشغيل sp_refreshsqlmodule UDFs (راجع sp_refreshsqlmodule (Transact-SQL) للحصول على تفاصيل حول هذا الإجراء المخزن على النظام)

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

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

/*

إنشاء برنامج نصي يمكن استخدامه لتحديث كل UDFs Scalar النشطة المكبلة.

ملاحظة لا sp_refreshsqlmodule أي أذونات أو خصائص موسع،

أو خيارات SET المقترنة بكائن.

*/

حدد '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

ملاحظة يتم إصدار Acrobat Reader من قِبل شركة Adobe Systems Inc.‎. بعد الترقية إلى Microsoft SQL Server CU5 2019، سنشتق تلقائيا إمكانية تكهين UDF أثناء عملية التحويل البرمجي مرة أخرى.

الحل

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

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

الحالة

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

المراجع

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

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

توسيع المهارات
استكشاف التدريب
الحصول على الميزات الجديدة أولاً
الانضمام إلى Microsoft Insider

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

ما مدى رضاك عن جودة الترجمة؟

ما الذي أثّر في تجربتك؟

هل لديك أي ملاحظات إضافية؟ (اختياري)

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

×