KB4054398 - แก้ไข: "การเปรียบเทียบไม่ถูกต้องเนื่องจากไม่มีการเปรียบเทียบ" เกิดขึ้นใน SQL Server 2014, 2016 และ 2017

นำไปใช้กับ
SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2014 Service Pack 2 - duplicate (do not use) SQL Server 2017 Standard on Windows SQL Server 2017 Developer on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Enterprise Core on Windows SQL Server 2016 Service Pack 1 SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use)

อาการ

สมมติว่า คุณมีคิวรีที่ทําการดําเนินการบางอย่างของสตริง ตัวอย่างเช่น การเรียงต่อกัน บนคอลัมน์ CHAR หรือ VARCHAR ใน Microsoft SQL Server 2014, 2016 และ 2017 ลองทำตามสถานการณ์ต่อไปนี้:

  • คุณเชื่อมคอลัมน์กับการเรียงที่ต่างกันที่กําหนดให้กับคอลัมน์เหล่านั้น
  • การเรียงเหล่านั้นไม่สามารถเข้ากันได้ ตัวอย่างเช่น คุณพยายามเรียงคอลัมน์ที่ถูกเรียงต่อกันเป็น Latin1_General_CI_AI กับ Latin1_General_BIN
  • ผลลัพธ์สุดท้ายของการเรียงต่อกันจะถูกกําหนดให้กับการเรียงที่เฉพาะเจาะจง (รวมถึง "database_default") เนื่องจากการแก้ปัญหาความขัดแย้งของการเรียง

ในสถานการณ์สมมตินี้ SQL Server อาจส่งกลับข้อความแจ้งการขายปลีกที่ระบุว่า "การเปรียบเทียบไม่ถูกต้องเนื่องจากไม่มี COLLATION" และคุณอาจได้รับข้อความแสดงข้อผิดพลาดบางอย่างที่คล้ายกับต่อไปนี้:

หมายเหตุ

  • ตําแหน่ง: typinfo.cpp:LineNumber
    นิพจน์: เท็จ
    SPID: SPID
    รหัสกระบวนการ: รหัสกระบวนการ
    คําอธิบาย: การเปรียบเทียบไม่ถูกต้องเนื่องจากไม่มีการเรียง

  • Msg 3624, ระดับ 20, สถานะ 1, LineNumber
    การตรวจสอบการยืนยันระบบล้มเหลว ตรวจสอบบันทึกข้อผิดพลาด SQL Server เพื่อดูรายละเอียด โดยทั่วไปความล้มเหลวของการยืนยันเกิดจากบักของซอฟต์แวร์หรือความเสียหายของข้อมูล เมื่อต้องการตรวจสอบความเสียหายของฐานข้อมูล ให้พิจารณาเรียกใช้ DBCC CHECKDB หากคุณยินยอมที่จะส่งบันทึกข้อมูลไปยัง Microsoft ระหว่างการติดตั้ง ระบบจะส่งบันทึกข้อมูลขนาดเล็กไปยัง Microsoft การอัปเดตอาจพร้อมให้บริการจาก Microsoft ใน Service Pack รุ่นล่าสุดหรือการแก้ไขด่วนจากฝ่ายสนับสนุนทางเทคนิค

  • Msg 596, ระดับ 21, รัฐ 1, LineNumber
    ไม่สามารถดําเนินการต่อไปได้ เนื่องจากเซสชันอยู่ในสถานะหยุดทํางาน

  • Msg 0, ระดับ 20, สถานะ 0, LineNumber

  • มีข้อผิดพลาดร้ายแรงเกิดขึ้นในคําสั่งปัจจุบัน  ผลลัพธ์ควรถูกละทิ้ง (ถ้ามี)

สาเหตุ

ในระหว่างขั้นตอนการปรับคิวรีให้เหมาะสม SQL Server จะพยายามคํานวณคาร์ดินาล ities บนผลลัพธ์ระดับกลางของขั้นตอนต่างๆ ของคิวรี เช่น การเรียงต่อกัน เนื่องจากการแก้ปัญหาข้อขัดแย้งการเรียงเกิดขึ้นที่ส่วนท้ายสุด ตัวปรับคิวรีให้เหมาะสมอาจไม่ทราบและพยายามคํานวณคาร์ดินาลลิตี้แบบเรียงต่อกันบนข้อมูลที่ป้อนเข้าด้วยการเรียงที่ขัดแย้งกัน

การแก้ปัญหา

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

การอัปเดตสะสม 8 สําหรับ SQL Server 2016 SP1

การอัปเดตสะสม 4 สําหรับ SQL Server 2017

การอัปเดตสะสม 9 สําหรับ SQL Server 2014 SP2

เกี่ยวกับการอัปเดตสะสมสําหรับ SQL Server:

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

การอัปเดตสะสมล่าสุดสําหรับ SQL Server 2016

การอัปเดตสะสมล่าสุดสําหรับ SQL Server 2017

การอัปเดตสะสมล่าสุดสําหรับ SQL Server 2014

สถานะ

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

การอ้างอิง

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