تصحيح: مشاكل إينلينينج UDF الرقمية في SQL Server 2019

ينطبق على: SQL Server 2019 on LinuxSQL Server 2019 on Windows

الأعراض


الدالات المعرفة من قبل المستخدم (Udf) التي يتم تطبيقها فيتتم الاشاره إلى العمليات-SQL والتي ترجع قيمه بيانات واحده باعتبارها "رقميه SQL"الدالات المعرفة من قبل المستخدم (Udf). 
يقدم Microsoft SQL Server 2019 الإصدار العددي ل UDFميزه إينلينينج التي يمكنها تحسين أداء الاستعلامات التي تستدعي SQLUdf رقميه ، حيث ان تنفيذ UDF هو الاختناق الأساسي. T إينلينينج الدالة UDF الرقمية SQL التي تقوم تلقائيا بتحويل إينلينيابل Udf إلى التعبيرات العلائقية. 
يتضمن هذا التحديث التراكمي العديد من الإصلاحات عبرالمناطق التالية للسيناريوهات التي قد يكون فيها الاستعلام الذي يستخدم UDF إينلينينج الرقميإرجاع خطا أو نتائج غير متوقعه:
  • خطا عدم تطابق النوع إذا كان نوع الإرجاع ل UDF هو sql_variant (تمت اضافته في Microsoft SQL Server 2019 CU2) 
  • استدعاء UDF من sp_executesql إحباط التنفيذ (تمت اضافته في MICROSOFT SQL server 2019 CU2)
  • يشير Udf التسميات بدون الأمر "مقترن به" إلى إرجاع نتائج غير صحيحه (تمت اضافتها في MICROSOFT SQL server 2019 CU2)
  • تحدث حالات نفاد الذاكرة وتسرب الذاكرة بسبب وجود Udf رقميه كبيره جدا (تمت اضافتها في MICROSOFT SQL Server 2019 CU2)
  • المتغيرات غير المهياه المستخدمة في الشرط (IF-ELSE) تتسبب العبارات في حدوث أخطاء (تمت اضافتها في MICROSOFT SQL server 2019 CU2)
هذا التراكمييقوم التحديث أيضا بحظر إينلينينج في السيناريوهات التالية:
  • إذا كان UDF يشير إلى دالات مضمنه معينه (علي سبيل المثال ، @ @ROWCOUNT) قد يتم تبديل النتائج عند إينلينيد (تمت اضافتها في MICROSOFT SQL server 2019 CU2)
  • عند تمرير الدالات التجميعية كمعلمات إلى UDF رقمي (تمت اضافتها في MICROSOFT SQL Server 2019 CU2)
  • إذا كانت المراجع المضمنة في UDF (علي سبيل المثال: OBJECT_ID 2019 )
  • إذا كان UDF يستخدم أساليب XML (التي تمت اضافتها في MICROSOFT SQL server 2019 CU4)
  • إذا احتوي UDF علي تحديد بواسطة ORDER BY بدون "اعلي 1" (تمت اضافته في MICROSOFT SQL Server 2019 CU4)
  • إذا كان استعلام التحديد يقوم بتنفيذ واجب بالترابط مع عبارة ORDER by (علي سبيل المثال ، حدد @x = @x + 1 من ترتيب الجدول حسب column_name) (تمت اضافته في Microsoft SQL SERVER 2019 CU4)
  • إذا احتوي UDF علي عبارات إرجاع متعددة (تمت اضافتها في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 يستخدم مجموعات التجميع أو المكعب أو المجموعة(تمت اضافته في Microsoft SQL Server 2019 CU6)
  • إذا احتوي استعلام الاتصال ب UDF علي متغير يتم استخدامهالمعلمة UDF للتعيين (علي سبيل المثال ، حدد @y = 2 ، @x = UDF (@y)) (تمت اضافته فيMicrosoft SQL Server 2019 CU6)
بعد الترقية إلى Microsoft SQL Server 2019 CU2 ولكن قبل الترقية إلى CU5 ، يجب أعاده تقييم ما إذا كان UDFمؤهل لإينلينينج. للقيام بذلك ، قم بتحديث الudf الرقمية المؤهلة من خلال اي منالأساليب التالية:
البرنامج النصي التاليينشئ برنامج نصي لتحديث بيانات التعريف لudf الرقمية الموجودة في إينلينيد: 
/*
      إنشاء برنامج نصي يمكن استخدامه لتحديث كل أرقام إينلينيابل النشطةUdf.
      ملاحظه: لا يؤثر sp_refreshsqlmodule علي اي أذونات ، وخصائص موسعه ،
      أو تعيين الخيارات المقترنة بالعنصر.
*/
تحديد ' تنفيذ»sys. sp_refreshsqlmodule ' [' + OBJECT_SCHEMA_NAME (object_id) + + ']. ' + ' [' + OBJECT_NAME (object_id)
      + ']'';' ك ' ريفريشستاتيمينت '
من sys. sql_modules
أين is_inlineable = 1
     و inline_type = 1;
متابعه
ملاحظه بعدكالترقية إلى Microsoft SQL Server 2019 CU5 ، سنقوم تلقائيا باشتقاق UDFإينلينيبيليتي اثناء التحويل البرمجي مره أخرى.

الحالة


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

الحل


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

المراجع


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