ข้ามไปที่เนื้อหาหลัก
การสนับสนุน
ลงชื่อเข้าใช้
ลงชื่อเข้าใช้ด้วย Microsoft
ลงชื่อเข้าใช้หรือสร้างบัญชี
สวัสดี
เลือกบัญชีอื่น
คุณมีหลายบัญชี
เลือกบัญชีที่คุณต้องการลงชื่อเข้าใช้

อาการ

User-Defined ฟังก์ชัน (UDF) ที่นํามาใช้ใน Transact-SQL และที่ส่งกลับค่าข้อมูลเดียวเรียกว่า T-SQL Scalar User-Defined Functions (UDFs) 

ฟีเจอร์การจัดเรียง UDF สเกลาถูกนํามาใช้ใน Microsoft SQL Server 2019 คุณลักษณะนี้สามารถปรับปรุงประสิทธิภาพของคิวรีที่เรียกใช้ T-SQL Scalar UDF ที่การดําเนินการ UDF เป็นปัญหาคอขวดหลัก การอินไลน์ T-SQL Scalar UDF จะแปลง UDF ที่สามารถจัดเรียงได้ให้เป็นนิพจน์เชิงสัมพันธ์โดยอัตโนมัติ 

การอัปเดตแบบสะสมนี้ (CU) มี การแก้ไข หลายอย่างในพื้นที่ต่อไปนี้สําหรับสถานการณ์ที่คิวรีที่ใช้การ Inlining สเกลา UDF อาจส่งกลับข้อความแสดงข้อผิดพลาดหรือผลลัพธ์ที่ไม่คาดคิด:

  • ข้อผิดพลาดชนิดไม่ตรงกันเกิดขึ้นถ้าชนิดการส่งคืนของ UDF เป็น sql_variant (เพิ่มเข้ามาใน SQL Server CU2 2019)

  • การเรียก UDF จากsp_executesqlยกเลิกการดําเนินการ (เพิ่มใน SQL Server CU2 2019)

  • UDF ที่อ้างอิงป้ายชื่อโดยไม่มีคําสั่ง GOTO ที่เกี่ยวข้องส่งกลับผลลัพธ์ที่ไม่ถูกต้อง (ถูกเพิ่มใน SQL Server CU2 2019)

  • หน่วยความจําไม่เพียงพอและการรั่วไหลของหน่วยความจําเกิดขึ้นเนื่องจาก UDF สเกลาขนาดใหญ่มาก (เพิ่มเข้ามาใน SQL Server CU2 2019)

  • ตัวแปรที่ไม่ได้เตรียมใช้งานที่ใช้ในคําสั่งเงื่อนไข (IF-ELSE) ทําให้เกิดข้อผิดพลาด (เพิ่มใน SQL Server CU2 2019)

  • เกิดข้อผิดพลาดในการแปลงอย่างชัดเจนถ้า UDF มีพารามิเตอร์ sql_variant(เพิ่มเข้ามาใน SQL Server CU7 2019)

  • เกิดข้อผิดพลาดถ้าการอ้างอิงฟังก์ชันสเกลา CHECKSUM(เพิ่มเข้ามาใน SQL Server 2019 CU7)

  • การเรียกใช้ UDF ที่มีการประเมินนิพจน์สเกลาใหม่อีกครั้งจํานวนมากอาจทําให้เกิดข้อผิดพลาดตัวจัดกําหนดการที่ไม่ก่อให้เกิดผลผลิต (เพิ่มเข้ามาใน SQL Server 2019 CU7)

    หมายเหตุ: การแก้ไขปัญหานี้อาจทําให้ประสิทธิภาพการทํางานถดถอยในบางครั้ง เพื่อลดการถดถอยของประสิทธิภาพการทํางานนี้ คุณสามารถปิดใช้งานการแก้ไขเดิมโดยการเปิดติดตามค่าสถานะ (TF) 13156

    Microsoft กําลังดําเนินการแก้ไขสําหรับการถดถอยของประสิทธิภาพซึ่งจะพร้อมใช้งานใน CU ในอนาคต

  • ข้อผิดพลาดเกิดขึ้นถ้าคิวรีการอ้างอิง UDF ใช้ OPTION (RECOMPILE)(ถูกเพิ่มใน SQL Server CU7 2019)

  • ข้อผิดพลาดของสิทธิ์จะเกิดขึ้นถ้ามุมมองเรียกใช้ UDF แบบอินไลน์ (เพิ่มเข้ามาใน SQL Server 2019 CU9)

  • การละเมิดการเข้าถึงจะเกิดขึ้นหากมีการใช้query_tsql_scalar_udf_inlinedXEvent (เพิ่มเข้ามาใน SQL Server 2019 CU9)

  • ลักษณะการทํางานที่ไม่สอดคล้องกันเกิดขึ้นเนื่องจาก Scalar UDF Inlining ไม่เคารพคําแนะนําคิวรี QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n(เพิ่มเข้ามาใน SQL Server 2019 CU9)

  • UDF ที่ด้านในประกอบด้วยการรวมที่อาจทําให้เกิดข้อผิดพลาดของตัวจัดกําหนดการที่ไม่ก่อให้เกิดผลลัพธ์ (ถูกเพิ่มใน SQL Server CU9 2019)

  • ข้อผิดพลาดหน่วยความจําไม่เพียงพอเกิดขึ้นเนื่องจากลําดับของการดําเนินการสเกลาบนตัวแปรเดียวกันในบล็อกเงื่อนไข (เพิ่มเข้ามาใน SQL Server 2019 CU9)

  • หลังจากที่คุณอัปเกรดเป็น CU9 การละเมิดการเข้าถึงจะเกิดขึ้นถ้าวัตถุเรียกใช้ UDF แบบอินไลน์สเกลา (UDF1) ที่มี UDF แบบอินไลน์สเกลา (UDF2) ที่ใช้เป็นพารามิเตอร์การป้อนข้อมูล (เพิ่มใน SQL Server CU11 2019)

  • Inlining UDFs might cause error and generate error code 6846, 1011, and 107 (added in SQL Server 2019 CU11)

  • Inlining UDFs that run as the non-sysadmin account might return the error message, "A severe error occurred on the current command.  ควรละทิ้งผลลัพธ์ถ้ามี" (เพิ่มใน SQL Server 2019 CU16)

  • การละเมิดการเข้าถึงจะเกิดขึ้นถ้าตารางชั่วคราวถูกเรียกใช้ภายใน UDF โดยใช้คําเหมือน (เพิ่มใน Microsoft SQL Server 2022 CU1 และ SQL Server CU19)

  • การละเมิดการเข้าถึงจะเกิดขึ้นถ้าข้อกําหนด UDF ประกอบด้วยป้ายชื่อ GOTO และคําสั่งRETURN เท่านั้น (เพิ่มเข้ามาใน SQL Server 2022 CU1 และ SQL Server 2019 CU19)

  • UDF สเกลาจะส่งกลับผลลัพธ์ในรูปแบบวันที่และเวลาที่ต่างกันเมื่อเปิดใช้งานฟีเจอร์การจัดเรียง UDF สเกลา (ถูกเพิ่มลงใน SQL Server 2022 CU3 และ SQL Server 2019 CU20)

  • แฟ้มการถ่ายโอนข้อมูลจะถูกสร้างขึ้นถ้าแบบสอบถามที่มีส่วนคําสั่ง GROUP BY ใช้ UDF แบบอินไลน์ในคําสั่ง SELECT โดยไม่มีฟังก์ชันการรวม (เพิ่มใน SQL Server 2022 CU12 และ SQL Server 2019 CU26)

  • ข้อผิดพลาด "กระบวนงานที่เก็บไว้สูงสุด ฟังก์ชัน ทริกเกอร์ หรือดูระดับการซ้อนเกิน (ขีดจํากัด 32)" จะเกิดขึ้นถ้าฟีเจอร์การอินไลน์ Scalar UDF เปิดอยู่ แม้ว่าระดับการซ้อนจะไม่เกิน (เพิ่มใน SQL Server 2022 CU12 และ SQL Server 2019 CU26)

  • หน่วยความจําเสียหายเกิดขึ้นใน sqllang.dll!CProchdr::FDeriveInlineabilityOfScalarUdf ถ้าฟีเจอร์การอินไลนิ่ง Scalar 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 CU2 2019)

  • ถ้า UDF ใช้วิธีการ XML (เพิ่มใน SQL Server 2019 CU4)

  • ถ้า UDF มีคําสั่ง SELECTที่ใช้ส่วนคําสั่งORDER BYแต่ไม่ TOP 1(เพิ่มลงใน SQL Server CU4)

  • ถ้าคําสั่ง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 SETSCUBEหรือ ROLLUP (เพิ่มเข้ามาใน SQL Server CU6 2019)

  • ถ้าคิวรีการเรียก UDF มีตัวแปรที่ใช้เป็นพารามิเตอร์ UDF สําหรับงานที่มอบหมาย (ตัวอย่างเช่น SELECT @y=2, @x=UDF(@y)) (เพิ่มใน SQL Server 2019 CU6)

  • ถ้า UDF อ้างอิงคอลัมน์ที่เข้ารหัสลับ (เพิ่มเข้ามาใน SQL Server 2019 CU11)

  • ถ้า UDF มีการอ้างอิงไปยัง WITH XMLNAMESPACES(เพิ่มเข้ามาใน CU11 SQL Server 2019)

  • ถ้าคิวรีเรียกใช้ UDF มีนิพจน์ตารางทั่วไป (CTEs) (เพิ่มเข้ามาใน SQL Server 2019 CU11)

  • ถ้าข้อกําหนด UDF มีตารางหรือคําเหมือนชั่วคราวสําหรับตารางชั่วคราว (เพิ่มเข้ามาใน SQL Server 2022 CU1 และ SQL Server 2019 CU19)

  • ถ้าข้อกําหนด UDF มีคําสั่งSELECTพร้อมกับส่วนคําสั่งDISTINCTบนคอลัมน์งานที่มอบหมายหลายคอลัมน์ (เพิ่มเข้ามาใน SQL Server 2022 CU4 และ SQL Server 2019 CU20)

  • ถ้า UDF มีคําสั่ง SELECT ที่ใช้ส่วนคําสั่ง TABLESAMPLE PERCENT และการกําหนดตัวแปรหลายรายการ (เพิ่มใน SQL Server CU7)

  • ถ้ามีคิวรี INSERT อยู่บนตารางที่อ้างอิงโดยมุมมองที่มีการทําดัชนีที่มี UDF (ถูกเพิ่มลงใน SQL Server 2022 CU12 และ SQL Server 2019 CU26)

หลังจากที่คุณอัปเกรดเป็น SQL Server 2019 CU2 แต่ก่อนที่คุณจะอัปเกรดเป็น SQL Server CU5 2019 คุณควรประเมินอีกครั้งว่า UDF มีสิทธิ์สําหรับอินบุกหรือไม่ เมื่อต้องการทําเช่นนี้ ให้รีเฟรช UDFs สเกลาที่มีสิทธิ์ผ่านวิธีใดวิธีหนึ่งต่อไปนี้:

  • เรียกใช้ sp_refreshsqlmodule สําหรับ UDF สเกลาที่เกี่ยวข้อง สําหรับข้อมูลเพิ่มเติมเกี่ยวกับกระบวนการที่เก็บไว้ของระบบนี้ ให้ดูที่ sp_refreshsqlmodule (Transact-SQL)

  • เปลี่ยนแปลงหรือสร้าง UDF สเกลาที่มีอยู่ใหม่โดยใช้ข้อกําหนด สิทธิ์ และการตั้งค่าคุณสมบัติที่มีอยู่ สําหรับข้อมูลเพิ่มเติม ให้ดู ฟังก์ชัน ALTER (Transact-SQL)

คําสั่งต่อไปนี้สร้างสคริปต์เพื่อรีเฟรช Metadata ของ UDF สเกลาแบบอินไลน์ที่มีอยู่:

/*

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 CU5 แล้ว เราจะดําเนินการเรียกความยืดหยุ่น UDF โดยอัตโนมัติในระหว่างการคอมไพล์

การแก้ไข

ปัญหานี้ได้รับการแก้ไขแล้วในการอัปเดตสะสมสําหรับ SQL Server ต่อไปนี้:

แต่ละปรับปรุงสะสมใหม่สําหรับ SQL Server ประกอบด้วยโปรแกรมแก้ไขด่วนทั้งหมด และการแก้ไขข้อบกพร่องด้านความปลอดภัยทั้งหมดที่รวมอยู่ในการปรับปรุงสะสมก่อนหน้านี้ ดูการอัปเดตแบบสะสมล่าสุดสําหรับ SQL Server:

สถานะ

Microsoft ยืนยันว่าปัญหานี้เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ซึ่งมีการระบุไว้ในส่วน "นําไปใช้กับ"

อ้างอิง

เรียนรู้เกี่ยวกับ คําศัพท์ ที่ Microsoft ใช้เพื่ออธิบายการอัปเดตซอฟต์แวร์

ต้องการความช่วยเหลือเพิ่มเติมหรือไม่

ต้องการตัวเลือกเพิ่มเติมหรือไม่

สํารวจสิทธิประโยชน์ของการสมัครใช้งาน เรียกดูหลักสูตรการฝึกอบรม เรียนรู้วิธีการรักษาความปลอดภัยอุปกรณ์ของคุณ และอื่นๆ

ชุมชนช่วยให้คุณถามและตอบคําถาม ให้คําติชม และรับฟังจากผู้เชี่ยวชาญที่มีความรู้มากมาย

ข้อมูลนี้เป็นประโยชน์หรือไม่

คุณพึงพอใจกับคุณภาพภาษาเพียงใด
สิ่งที่ส่งผลต่อประสบการณ์ใช้งานของคุณ
เมื่อกดส่ง คำติชมของคุณจะถูกใช้เพื่อปรับปรุงผลิตภัณฑ์และบริการของ Microsoft ผู้ดูแลระบบ IT ของคุณจะสามารถรวบรวมข้อมูลนี้ได้ นโยบายความเป็นส่วนตัว

ขอบคุณสำหรับคำติชมของคุณ!

×