อาการ
สมมติว่า คุณพยายามที่จะลบข้อมูลจากตาราง และข้อมูลมีการอ้างอิงในตารางอื่นใน 2016 เซิร์ฟเวอร์ SQL ของ Microsoft และ 2017 ฉัน f คุณสำรวจแบบสอบถาม แผนการดำเนินการ คุณสามารถมองเห็นได้ใช้ตัวดำเนินการสร้างการอ้างอิงคีย์ Foreign ตรวจสอบ.ในสถานการณ์นี้ คุณอาจได้รับข้อความข้อผิดพลาดต่อไปนี้แม้ว่าแถวกำลัง ลบไม่ได้อ้างอิงในตารางอื่น:
ข่าวสารเกี่ยวกับ 547 ระดับ 16 สถานะ 0, บรรทัดLineNumber
คำสั่ง DELETE ที่ขัดแย้งกับการอ้างอิงข้อจำกัด
สถานะ
Microsoft ยืนยันว่าปัญหานี้เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ซึ่งมีการระบุไว้ในส่วน "นำไปใช้กับ"
การแก้ไข
ปัญหานี้ได้รับการแก้ไขในการปรับปรุงสะสมต่อไปนี้สำหรับ SQL Server:
หมายเหตุ ปัญหานี้ได้รับการแก้ไขในการปรับปรุง 6 สะสมสำหรับ SQL Server 2016 SP2
เกี่ยวกับการปรับปรุงที่สะสมสำหรับ SQL Server:
แต่ละโปรแกรมปรับปรุงสะสมใหม่สำหรับ SQL Server ประกอบด้วยโปรแกรมแก้ไขด่วนทั้งหมด และทั้งหมดที่แก้ไขความปลอดภัยที่ถูกรวมอยู่ในการปรับปรุงที่สะสมก่อนหน้านี้ ตรวจหาการปรับปรุงสะสมล่าสุดสำหรับ SQL Server:
วิธีแก้ไขปัญหาชั่วคราว
เมื่อต้องการแก้ไขปัญหานี้ชั่วคราว ให้ใช้หนึ่งในวิธีต่อไปนี้:
-
ใช้ระดับความเข้ากันได้ต่ำกว่า 130 เพื่อเรียกใช้แบบสอบถามนี้
-
เปลี่ยนโครงสร้างดัชนีบนตารางการอ้าง
ข้อมูลเพิ่มเติม
ระดับความเข้ากันได้การตั้งค่าคอนฟิกขอบเขตของฐานข้อมูลเริ่มต้น 130 ใน SQL Server 2016 แผนการดำเนินการแบบสอบถามสามารถใช้การอ้างอิงคีย์ต่างประเทศ ตรวจสอบการดำเนินการเพื่อตรวจสอบถ้า แถวในตารางถูกอ้างอิง โดยแถวใด ๆ ในที่อื่น ตารางผ่านข้อจำกัด referential integrity ตัวดำเนินการเช่นนี้สามารถนำมาใช้ ตารางถูกอ้างอิง โดยตารางต่างประเทศจำนวนมาก ในการดำเนินการนี้ SQL Server เลือกดัชนีในแต่ละตารางอ้างเพื่อทำการตรวจสอบดังกล่าว ถ้า ตารางอ้างมีดัชนีที่ มีหลายคอลัมน์คีย์ บางส่วนดังกล่าว คอลัมน์ที่ส่วนเริ่มต้นไม่ได้เป็นส่วนหนึ่งของ foreign key แต่บางอื่น ๆ คอลัมน์ที่เป็นส่วนหนึ่งของ foreign key ซึ่งอาจส่งผลในการตรวจสอบไม่ถูกต้องที่จะดำเนินการ โดย SQL Server
ตัวอย่างเช่น พิจารณา schema ต่อไปนี้:
สร้างตาราง tpk (เมจ pk int ข้อจำกัด คลัสเตอร์คีย์หลัก cpk)
สร้างตาราง tfk (เป็น int, fk int ข้อจำกัด tpk อ้างอิงคีย์นอก cfk, clustered(a,fk)) ia ดัชนี
Schema ดังกล่าวอาจทำให้เกิดปัญหานี้ แต่ถ้าคุณเปลี่ยนแปลง ลำดับของคอลัมน์ในดัชนี ia ไป (fk ตัว), จะไม่
อ้างอิง
การเรียนรู้เกี่ยวกับการ คำศัพท์เฉพาะทางที่ Microsoft ใช้เพื่ออธิบายปรับปรุงซอฟต์แวร์