หากคุณเข้าใจความแตกต่างระหว่างขอบเขตและเซสชันมันจะง่ายต่อการเข้าใจวิธีการเหล่านี้
โพสต์บล็อกที่ดีมากโดย Adam Anderson อธิบายความแตกต่างนี้:
เซสชันหมายถึงการเชื่อมต่อปัจจุบันที่กำลังดำเนินการคำสั่ง
ขอบเขตหมายถึงบริบททันทีของคำสั่ง การเรียกโพรซีเดอร์ที่เก็บไว้ทุกครั้งจะดำเนินการในขอบเขตของตัวเองและการโทรที่ซ้อนกันจะดำเนินการในขอบเขตที่ซ้อนภายในขอบเขตของโพรซีเดอร์การเรียก ในทำนองเดียวกันคำสั่ง SQL ที่เรียกใช้จากแอปพลิเคชันหรือ SSMS จะดำเนินการในขอบเขตของตัวเองและหากคำสั่งนั้นเรียกใช้ทริกเกอร์ใด ๆ ทริกเกอร์แต่ละตัวจะดำเนินการภายในขอบเขตที่ซ้อนกันของตัวเอง
ดังนั้นความแตกต่างระหว่างวิธีการดึงข้อมูลเฉพาะตัวทั้งสามมีดังนี้:
@@identity
ส่งกลับค่าตัวตนสุดท้ายที่สร้างขึ้นในเซสชั่นนี้แต่ขอบเขตใด ๆ
scope_identity()
ส่งกลับค่าตัวตนสุดท้ายนี้สร้างขึ้นในครั้งนี้เซสชั่นและนี้ขอบเขต
ident_current()
ส่งกลับค่าตัวตนสุดท้ายที่สร้างขึ้นสำหรับตารางโดยเฉพาะอย่างยิ่งในการใด ๆเซสชั่นและใด ๆขอบเขต