-
@@IDENTITY
trả về giá trị nhận dạng cuối cùng được tạo cho bất kỳ bảng nào trong phiên hiện tại, trên tất cả các phạm vi. Bạn cần phải cẩn thận ở đây , vì nó trên nhiều phạm vi. Bạn có thể nhận được một giá trị từ trình kích hoạt, thay vì câu lệnh hiện tại của bạn.
-
SCOPE_IDENTITY()
trả về giá trị nhận dạng cuối cùng được tạo cho bất kỳ bảng nào trong phiên hiện tại và phạm vi hiện tại. Nói chung là những gì bạn muốn sử dụng .
-
IDENT_CURRENT('tableName')
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 nào và bất kỳ phạm vi nào. Điều này cho phép bạn chỉ định bảng bạn muốn giá trị từ đó, trong trường hợp hai bảng trên không hoàn toàn là thứ bạn cần ( rất hiếm ). Ngoài ra, như @Guy Starbuck đã đề cập, "Bạn có thể sử dụng điều này nếu bạn muốn nhận giá trị IDENTITY hiện tại cho bảng mà bạn chưa chèn bản ghi vào."
-
OUTPUT
mệnh đề của INSERT
câu lệnh sẽ cho phép bạn truy cập mọi hàng đã được chèn qua câu lệnh đó. Vì nó nằm trong phạm vi tuyên bố cụ thể, nó đơn giản hơn hơn các chức năng khác ở trên. Tuy nhiên, nó hơi dài dòng hơn một chút (bạn sẽ cần phải chèn vào một biến bảng / bảng tạm thời và sau đó truy vấn nó) và nó cho kết quả ngay cả trong trường hợp lỗi khi câu lệnh được cuộn lại. Điều đó nói rằng, nếu truy vấn của bạn sử dụng kế hoạch thực thi song song, thì đây là phương pháp được đảm bảo duy nhất để nhận được danh tính (ngắn gọn của việc tắt chế độ song song). Tuy nhiên, nó được thực thi trước khi trình kích hoạt và không thể được sử dụng để trả về các giá trị do trình kích hoạt tạo.