อาการ
พิจารณาสถานการณ์ต่อไปนี้:
-
คุณใช้ฐานข้อมูลที่ตั้งค่าระดับความเข้ากันได้เป็น 130 ใน Microsoft SQL Server 2016
-
คุณดําเนินการคิวรีที่เข้าถึงดัชนีที่เก็บคอลัมน์และดัชนีที่เก็บแถวหรือฮีป และมีเพรดิเคตตัวกรอง (ส่วนคําสั่ง WHERE)
ในสถานการณ์สมมตินี้ SQL Server จะไม่สามารถผลักเพรดิเคตตัวกรองใกล้กับตัวดําเนินการแหล่งข้อมูล (การสแกนตารางหรือดัชนีหรือการค้นหา) ซึ่งอาจทําให้เกิดประสิทธิภาพคิวรีย่อย
นอกจากนี้ ถ้าคิวรีใช้นิพจน์ (เช่น การแปลงชนิด) ที่ความถูกต้องจะขึ้นอยู่กับข้อมูลที่ถูกกรอง (ตัวอย่างเช่น คอลัมน์ตาราง Char จะถูกแปลงเป็น int แต่เฉพาะชุดย่อยของค่าเท่านั้นที่มีการแทนค่าที่ใช้ได้ และเซตย่อยนี้จะถูกระบุโดยเพรดิเคตตัวกรอง) จากนั้นคิวรีอาจล้มเหลวโดยมีข้อผิดพลาดในการแปลงข้อมูลที่มีลักษณะอย่างใดอย่างหนึ่งต่อไปนี้
Msg 245, ระดับ 16, สถานะ 1, การแปลงบรรทัด 20
ล้มเหลวเมื่อแปลงค่า varchar '0.5' เป็น int ชนิดข้อมูล
Msg 8114, ระดับ 16, สถานะ 5, ข้อผิดพลาดใน
การแปลงชนิดข้อมูล varchar เป็น bigint
การแก้ไข
ปัญหานี้ได้รับการแก้ไขแล้วในการอัปเดตสะสมต่อไปนี้สําหรับ SQL Server:
การอัปเดตสะสม 2 สําหรับ SQL Server 2016 SP1
หมาย เหตุคุณต้องเปิดใช้งานการแก้ไขด่วนของตัวปรับคิวรีให้เหมาะสมเพื่อให้การแก้ไขนี้มีผล
คุณสามารถเปิดใช้งานโปรแกรมแก้ไขด่วนตัวปรับคิวรีให้เหมาะสมโดยใช้หนึ่งในตัวเลือกต่อไปนี้: ติดตามค่าสถานะ 4199, การตั้งค่าการกําหนดค่าขอบเขตฐานข้อมูล QUERY_OPTIMIZER_HOTFIXES=ON (พร้อมใช้งานใน SQL Server 2016 และใหม่กว่า) หรือตัวเลือกคิวรี USE_HINT 'ENABLE_QUERY_OPTIMIZER_HOTFIXES' (พร้อมใช้งานใน SQL Server 2016 SP1 และใหม่กว่า)
แต่ละปรับปรุงสะสมใหม่สําหรับ SQL Server ประกอบด้วยโปรแกรมแก้ไขด่วนทั้งหมด และการแก้ไขข้อบกพร่องด้านความปลอดภัยทั้งหมดที่รวมอยู่ในการปรับปรุงสะสมก่อนหน้านี้ ดูการอัปเดตแบบสะสมล่าสุดสําหรับ SQL Server:
การอัปเดตสะสมล่าสุดสําหรับ SQL Server 2016
สถานะ
Microsoft ยืนยันว่าปัญหานี้เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ซึ่งมีการระบุไว้ในส่วน "นำไปใช้กับ"
อ้างอิง
เรียนรู้เกี่ยวกับ คําศัพท์ที่ Microsoft ใช้เพื่ออธิบายการอัปเดตซอฟต์แวร์