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

الأعراض

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

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

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

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

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

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

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

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

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

  • خطأ مرفوع عند مراجع الدالة scalar CHECKSUM (المضاف في Microsoft SQL Server 2019 CU7)

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

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

  • أخطاء الأذونات التي يتم رفعها عند استدعاء طرق العرض لمعانات UDFs (مضافة في 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)

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

  • إذا كانت 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)

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

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

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

يقوم البرنامج النصي التالي بإنشاء برنامج نصي لتحديث بيانات التعريف الخاصة بالمعياراتUDFs الحالية غير المبتدأة:
 

/*

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


ملاحظة لا يؤثر sp_refreshsqlmodule أي أذونات أو خصائص موسدة

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

*/

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

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

الحالة

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

الحل

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

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

المراجع

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

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

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

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

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

شكراً لك على الملاحظات! يبدو أنه من المفيد إيصالك بأحد وكلاء دعم Office لدينا.

×