การเข้าใจวิธีการดึงค่า IDENTITY
ของแถวที่ถูกแทรกใน SQL
ถ้าคุณกำลังทำงานกับ SQL Server และต้องการดึงค่า IDENTITY
ของแถวที่ถูกแทรก คุณมีหลายวิธีให้เลือก โดยแต่ละวิธีมีผลลัพธ์และกรณีการใช้งานที่แตกต่างกัน ในโพสต์นี้เราจะสำรวจวิธีการที่พบบ่อยที่สุดในการดึงค่า IDENTITY
ของแถวที่ถูกแทรกและชี้แจงว่าเมื่อไหร่ควรใช้แต่ละวิธี
ความท้าทายในการดึงค่า IDENTITY
เมื่อคุณแทรกข้อมูลใหม่ลงในตารางฐานข้อมูลที่มีคอลัมน์ identity SQL Server จะสร้างค่าที่ไม่ซ้ำกันสำหรับคอลัมน์นั้นโดยอัตโนมัติ อย่างไรก็ตาม คุณอาจพบว่าจำเป็นต้องดึงค่าที่สร้างขึ้นนี้ทันทีหลังจากทำการแทรก นี่อาจเป็นเรื่องสำคัญสำหรับหลายเหตุผล เช่น การบันทึก, การประมวลผลต่อไป, หรือการสร้างความสัมพันธ์กับตารางอื่น ๆ
วิธีการที่สามารถใช้ในการดึงค่าของ IDENTITY
-
การใช้
@@IDENTITY
- คำอธิบาย: คืนค่าหมายเลข identity ล่าสุดที่ถูกสร้างขึ้นสำหรับตารางใด ๆ ในเซสชั่นปัจจุบันทั่วทุกสโคป
- คำเตือน: เนื่องจากมันดึงค่าจากทุกสโคป รวมถึงค่าที่ถูกสร้างโดย trigger จึงง่ายที่จะดึงค่าไม่คาดคิดได้
- กรณีการใช้งาน: โดยทั่วไปไม่แนะนำเนื่องจากอาจเกิดความสับสนได้
-
การใช้
SCOPE_IDENTITY()
- คำอธิบาย: คืนค่าหมายเลข identity ล่าสุดที่ถูกสร้างขึ้นสำหรับตารางใด ๆ ในเซสชั่นปัจจุบันและในสโคปปัจจุบัน
- คำแนะนำ: นี่เป็นวิธีที่ปลอดภัยและเชื่อถือได้มากที่สุดเมื่อดึงค่าหมายเลข identity
- กรณีการใช้งาน: เหมาะสำหรับการดำเนินการตามปกติส่วนใหญ่
-
การใช้
IDENT_CURRENT('tableName')
- คำอธิบาย: คืนค่าหมายเลข identity ล่าสุดที่ถูกสร้างขึ้นสำหรับตารางเฉพาะ แม้ว่าจะอยู่ในเซสชั่นหรือสโคปใด
- หมายเหตุ: ใช้วิธีนี้เมื่อเป็นสิ่งสำคัญที่จะระบุตาราง แม้ว่านี่เป็นข้อกำหนดที่เกิดขึ้นไม่บ่อยนัก
- กรณีการใช้งาน: อาจมีประโยชน์หากคุณต้องการดึงค่าจากตารางที่ไม่ถูกแก้ไขโดยเซสชั่นของคุณเมื่อเร็ว ๆ นี้
-
การใช้
OUTPUT
Clause- คำอธิบาย: ช่วยให้คุณเข้าถึงแถวแต่ละแถวที่ถูกแทรกผ่านคำสั่ง
INSERT
ที่เฉพาะเจาะจง รวมถึงค่าหมายเลข identity ที่ถูกสร้างขึ้น - ข้อดี: ตรงไปตรงมามากกว่าวิธีข้างต้น รับประกันความถูกต้องแม้จะเกิดข้อผิดพลาดหลังจากการแทรก
- ข้อเสีย: ค่อนข้างเยอะกว่าเนื่องจากคุณจะต้องแทรกผลลัพธ์ลงในตัวแปรตารางหรือตารางชั่วคราว
- หมายเหตุพิเศษ: หากคำสั่งของคุณเกี่ยวข้องกับแผนการประมวลผลแบบขนาน นี่คือวิธีเดียวที่รับประกันว่าจะสามารถดึงค่าหมายเลข identity ได้
- คำอธิบาย: ช่วยให้คุณเข้าถึงแถวแต่ละแถวที่ถูกแทรกผ่านคำสั่ง
สรุป
แต่ละวิธีในการดึงค่า IDENTITY
มีจุดแข็งและจุดอ่อนของตัวเอง นี่คือสรุปอย่างรวบรัดที่จะช่วยให้คุณตัดสินใจ:
- ใช้
@@IDENTITY
หากคุณไม่รังเกียจต่อการไม่ชัดเจนและความสับสน - ชอบใช้
SCOPE_IDENTITY()
ในกรณีปกติส่วนใหญ่เพื่อรับประกันความถูกต้อง - เลือกใช้
IDENT_CURRENT()
เมื่อคุณต้องการข้อมูลจากตารางเฉพาะ - ใช้
OUTPUT
clause หากคุณต้องการค่าหลายค่าในการแทรกของคุณ โดยเฉพาะในคำสั่งที่ซับซ้อนหรือระหว่างการจัดการข้อผิดพลาด
ความคิดท้าย
โดยการเข้าใจวิธีเหล่านี้ คุณสามารถจัดการและดึงค่าหมายเลข identity ใน SQL Server ได้อย่างมีประสิทธิภาพ ทำให้การดำเนินการของฐานข้อมูลของคุณมีความสมบูรณ์และเชื่อถือได้มากขึ้น