วิธีแก้ไขข้อผิดพลาด "ไม่สามารถแทรกค่าที่ชัดเจนสำหรับคอลัมน์ข้อมูลประจำตัวในตารางเมื่อ IDENTITY_INSERT ถูกตั้งค่าเป็นปิด"
คอลัมน์คีย์หลักมักถูกตั้งค่าให้เพิ่มขึ้นอัตโนมัติเมื่อสร้างฐานข้อมูล SQL Server ขีด จำกัด IDENTITY ถูกตั้งค่าไว้สำหรับคอลัมน์คีย์หลักเพื่อดำเนินการนี้ ตำแหน่งเริ่มต้นและขั้นตอนของการเพิ่มจะถูกโอนไปยังคอลัมน์ IDENTITY เป็นพารามิเตอร์ จากนั้นเมื่อใดก็ตามที่มีการเพิ่มระเบียนใหม่ และการแทรกข้อมูลประจำตัวถูกตั้งค่าเป็นปิด ค่าของคอลัมน์ IDENTITY จะเพิ่มขึ้นตามขั้นตอนที่กำหนดไว้ล่วงหน้าซึ่งโดยปกติแล้วจะเป็นตัวเลข นอกจากนี้ คุณสมบัติ IDENTITY INSERT ถูกตั้งค่าเป็น ON เฉพาะสำหรับตารางเดียวในเซสชันเดียว
ในบทความนี้เราจะพูดถึงข้อผิดพลาด “ ไม่สามารถแทรกค่าที่ชัดเจนสำหรับคอลัมน์ข้อมูลประจำตัวในตาราง
เมื่อ IDENTITY_INSERT ถูกตั้งค่าเป็นปิด”ข้อผิดพลาดเกิดขึ้นเมื่อผู้ใช้ตั้งค่า“ identity_insert” เป็น“ OFF” จากนั้นพยายามแทรกข้อมูลลงในคอลัมน์คีย์หลักของตารางอย่างชัดเจน สิ่งนี้สามารถอธิบายได้โดยใช้ตัวอย่างด้านล่าง
การสร้างฐานข้อมูลและตาราง:
ขั้นแรก สร้างฐานข้อมูลชื่อ "appuals"
สร้างตารางชื่อ "บุคคล" โดยใช้รหัสต่อไปนี้ สร้างตารางโดยใช้ไฟล์ “ รหัสประจำตัวหลัก”
สร้างบุคคลตาราง ( ID INT IDENTITY (1, 1), first_name VARCHAR(MAX) , last_name VARCHAR(MAX) )
ไวยากรณ์สำหรับการตั้งค่า“ identity_insert off | บน":
“ ตั้งค่า identity_insert ปิด | บน" จะช่วยเราแก้ไขข้อผิดพลาดนี้ ไวยากรณ์ที่ถูกต้องสำหรับคำสั่งนี้มีดังต่อไปนี้
SET IDENTITY_INSERT. . {ปิด | บน }
ในขณะที่ข้อโต้แย้งแรก
โดยพื้นฐานแล้วมีสองวิธีที่แตกต่างกันในการแทรกข้อมูลลงในตารางโดยไม่มีข้อผิดพลาด สิ่งเหล่านี้ถือเป็นการแก้ปัญหาข้อผิดพลาดนี้และจะกล่าวถึงด้านล่าง
ข้อผิดพลาด 1: ตั้งค่า identity_insert ปิด
ในกรณีแรกเราจะแทรกข้อมูลลงในตารางด้วยไฟล์ “ ระบุตัวตนแทรก” ตั้งค่าให้ “ ปิด”. ดังนั้นหากมี ID อยู่ในคำสั่ง INSERT คุณจะได้รับข้อผิดพลาด "ไม่สามารถแทรกค่าที่ชัดเจนสำหรับคอลัมน์ข้อมูลประจำตัวในตาราง" บุคคล "เมื่อ IDENTITY_INSERT ถูกตั้งค่าเป็นปิด"
ดำเนินการรหัสต่อไปนี้ในแท็บแบบสอบถาม
ตั้งค่า identity_insert person off; ใส่เข้าไปใน person (ID, first_name, last_name) ค่า (3, 'Sadia', 'Majeed'), (4, 'Michel', 'Ronald')
ผลลัพธ์จะเป็นแบบนี้
สารละลาย:
เมื่อหมุน “ IDENTITY INSERT OFF”, ที่“ รหัสคีย์หลัก” ต้องไม่ปรากฏในคำสั่งแทรก
ตอนนี้รันโค้ดต่อไปนี้ในแท็บแบบสอบถาม
ตั้งค่า identity_insert person off; แทรกลงในค่าบุคคล (first_name, last_name) ('Sadia', 'Majeed'), ('Michel', 'Ronald')
สิ่งนี้จะแทรกข้อมูลลงในตารางโดยไม่มีข้อผิดพลาด ยิ่งไปกว่านั้นผู้ใช้ไม่จำเป็นต้องใส่รหัสคีย์หลัก แต่จะเพิ่มค่า ID ที่ไม่ซ้ำกันโดยอัตโนมัติดังที่เห็นในรูปด้านล่าง
ข้อผิดพลาด 2: ตั้งค่า identity_insert ON
ในกรณีที่สองเราจะแทรกข้อมูลลงในตารางด้วยไฟล์ “ ระบุตัวตนแทรก” ตั้งค่าให้ "บน". ดังนั้นหากไม่มี ID อยู่ในคำสั่ง INSERT คุณจะได้รับข้อผิดพลาด ” ข่าวสารเกี่ยวกับ 545 ระดับ 16 สถานะ 1 บรรทัดที่ 17 ต้องระบุค่าที่ชัดเจนสำหรับคอลัมน์ข้อมูลประจำตัวในตาราง ‘บุคคล’ ไม่ว่าจะเมื่อ IDENTITY_INSERT ถูกตั้งค่าเป็นเปิดหรือเมื่อผู้ใช้จำลองข้อมูลแทรกลงในคอลัมน์ NOT FOR REPLICATION identity”
สารละลาย:
เมื่อหมุน“ ระบุตัวตนแทรก” ที่ “ คีย์หลัก ไอดี” ต้องมีอยู่ในคำสั่งแทรก
ดำเนินการรหัสต่อไปนี้ในแท็บแบบสอบถาม
ตั้ง identity_insert บุคคลบน; ใส่ใน person (ID, first_name, last_name) ค่า (5, 'Jack', 'black'), (6, 'john', 'Wicky')
สิ่งนี้จะแทรกข้อมูลลงในตารางโดยไม่มีข้อผิดพลาด ดังนั้น รหัสคีย์หลัก ผู้ใช้จำเป็นต้องแทรกอย่างชัดเจน นอกจากนี้จะไม่เพิ่มค่า ID ที่ไม่ซ้ำกันโดยอัตโนมัติดังที่เห็นในรูปด้านล่าง
ถ้าคุณ "ตั้งค่าการระบุตัวตนบน”จะยังคงเปิดตลอดเซสชัน ดังนั้นคุณสามารถเพิ่มระเบียนได้มากเท่าที่คุณต้องการเมื่อตั้งค่านี้แล้ว นอกจากนี้ยังหมายถึงเซสชันที่เปิดใช้งานเท่านั้น ดังนั้นหากคุณเปิดแท็บแบบสอบถามอื่นคุณต้องเปิดแท็บ บน อีกครั้งสำหรับหน้าต่างแบบสอบถามนั้น