Nếu bạn hiểu sự khác biệt giữa phạm vi và phiên thì sẽ rất dễ hiểu các phương thức này.
Một bài đăng blog rất hay của Adam Anderson mô tả sự khác biệt này:
Phiên có nghĩa là kết nối hiện tại đang thực thi lệnh.
Phạm vi có nghĩa là bối cảnh ngay lập tức của một lệnh. Mỗi cuộc gọi thủ tục được lưu trữ thực thi trong phạm vi riêng của nó và các cuộc gọi lồng nhau thực hiện trong một phạm vi lồng nhau trong phạm vi của thủ tục gọi. Tương tự, một lệnh SQL được thực thi từ một ứng dụng hoặc SSMS thực thi trong phạm vi của chính nó và nếu lệnh đó kích hoạt bất kỳ kích hoạt nào, thì mỗi kích hoạt sẽ thực thi trong phạm vi lồng nhau của chính nó.
Do đó, sự khác biệt giữa ba phương thức truy xuất danh tính như sau:
@@identity
trả về giá trị nhận dạng cuối cùng được tạo trong phiên này nhưng bất kỳ phạm vi nào .
scope_identity()
trả về giá trị bản sắc cuối cùng được tạo trong này phiên và này phạm vi.
ident_current()
trả về giá trị nhận dạng cuối cùng được tạo cho một bảng cụ thể trong bất kỳ phiên và bất kỳ phạm vi nào .