แทรกคอลัมน์ที่มีชุด IDENTITY

ปรับปรุงหน้า :
วันที่สร้างเพจ :

SQL Server มีคุณสมบัติ "IDENTITY" ที่ตั้งค่าตัวเลขตามลําดับจาก 1 เป็นคอลัมน์ที่ระบุโดยอัตโนมัติเมื่อคุณเพิ่มระเบียน ตัวอย่างเช่น ถ้าคุณตั้งค่า IDENTITY ในคอลัมน์ A และเพิ่มระเบียน 3 คอลัมน์ A จะถูกเติมด้วยค่า 1, 2 และ 3 โดยอัตโนมัติตามลําดับที่คุณเพิ่มระเบียนเหล่านั้น

แม้ว่าคุณจะใช้คําสั่ง INSERT ค่าจะถูกตั้งค่าโดยอัตโนมัติดังนั้นจึงไม่จําเป็นต้องตั้งค่าอย่างชัดเจน แต่ฉันคิดว่ามีบางกรณีที่คุณต้องการตั้งค่าอย่างชัดเจนเพราะใช้สําหรับ Foreign Key เป็นต้น

ตัวอย่างเช่น สมมติว่ามีตารางที่มีการตั้งค่าคุณสมบัติ "IDENTITY" ในคอลัมน์ "ID" ดังที่แสดงในรูป

คําสั่ง INSERT ที่แทรกค่าลงในตารางนี้ รวมทั้งคอลัมน์ ID จะมีลักษณะดังนี้

insert into [テーブル名] ([ID], [Value]) values (1, 1)

อย่างไรก็ตามเมื่อฉันพยายามเรียกใช้ฉันคิดว่าข้อผิดพลาดต่อไปนี้จะปรากฏขึ้น

ผงชูรส 544 ระดับ 16 สถานะ 1 สาย 1 สาย 1 เมื่อตั้งค่า IDENTITY_INSERT เป็น OFF จะไม่สามารถแทรกค่าที่ชัดเจนลงในคอลัมน์ข้อมูลเฉพาะตัวของตาราง 'XXXXX' ได้

คอลัมน์ที่ตั้งค่าเป็น IDENTITY ในตอนแรกจะถือว่ามีค่าโดยอัตโนมัติ ดังนั้นคุณจึงไม่สามารถตั้งค่าได้อย่างชัดเจน

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

set identity_insert [テーブル名] on;
insert into [テーブル名] ([ID], [Value]) values (1, 1)
set identity_insert [テーブル名] off;

-- 確認
select * from [テーブル名];

ตอนนี้คุณสามารถตั้งค่าและแทรกค่าได้อย่างชัดเจนแล้ว INSERT-SELECT ที่ใช้ตารางยังใช้ได้

คอลัมน์ที่มี IDENTITY จะถูกกําหนดค่าโดยอัตโนมัติจาก 1 แต่ถ้าคุณตั้งค่าอย่างชัดเจนตามที่อธิบายไว้ข้างต้นคุณอาจสงสัยว่าหมายเลขใดจะถูกกําหนดต่อไป ในกรณีนี้ ค่าถัดไปที่กําหนดจะถูกกําหนดจากตัวเลขหลังจากเพิ่มค่าสูงสุดลงในตาราง ดังนั้นจึงไม่มีค่าที่ซ้ํากันเมื่อมีการแทรกระเบียนใหม่ (อย่างไรก็ตามมีข้อยกเว้นเนื่องจากความพิการ ฯลฯ )