วิธีแก้ไขข้อผิดพลาด "ไม่สามารถแทรกค่าที่ชัดเจนสำหรับคอลัมน์ข้อมูลประจำตัวในตารางเมื่อ 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  . .  {ปิด | บน }

ในขณะที่ข้อโต้แย้งแรก คือชื่อของฐานข้อมูลที่มีตารางอยู่ อาร์กิวเมนต์ที่สอง shows คือสคีมาที่ตารางนั้นเป็นของซึ่งต้องตั้งค่าเอกลักษณ์เป็น บน หรือ ปิด. อาร์กิวเมนต์ที่สาม

คือตารางที่มีคอลัมน์ข้อมูลประจำตัว

โดยพื้นฐานแล้วมีสองวิธีที่แตกต่างกันในการแทรกข้อมูลลงในตารางโดยไม่มีข้อผิดพลาด สิ่งเหล่านี้ถือเป็นการแก้ปัญหาข้อผิดพลาดนี้และจะกล่าวถึงด้านล่าง

ข้อผิดพลาด 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 ที่ไม่ซ้ำกันโดยอัตโนมัติดังที่เห็นในรูปด้านล่าง

ถ้าคุณ "ตั้งค่าการระบุตัวตนบน”จะยังคงเปิดตลอดเซสชัน ดังนั้นคุณสามารถเพิ่มระเบียนได้มากเท่าที่คุณต้องการเมื่อตั้งค่านี้แล้ว นอกจากนี้ยังหมายถึงเซสชันที่เปิดใช้งานเท่านั้น ดังนั้นหากคุณเปิดแท็บแบบสอบถามอื่นคุณต้องเปิดแท็บ บน อีกครั้งสำหรับหน้าต่างแบบสอบถามนั้น

Facebook Twitter Google Plus Pinterest