SELECT SCOPE_IDENTITY()
sử dụng @@ IDENTITY có thể có kết quả không mong muốn, vì vậy hãy cẩn thận với cách bạn sử dụng. Các trình kích hoạt chèn bản ghi vào các bảng khác sẽ khiến giá trị @@ IDENTITY thay đổi - trong đó SCOPE_IDENTITY () sẽ cung cấp cho bạn danh tính cuối cùng chỉ từ phạm vi hiện tại của bạn.
Đây là một ví dụ sẽ cho thấy sự khác biệt giữa @@ IDENTITY và SCOPE_INSERT () và cách chúng có thể trả về các giá trị khác nhau ..
use tempdb
go
create table table1
(ID int identity)
go
create table table2
(ID int identity(100, 1))
go
create trigger temptrig
on table1
for insert
as
begin
insert table2
default values;
end
go
insert table1
default values;
select SCOPE_IDENTITY(),
@@IDENTITY
Một tùy chọn khác mà chưa ai thảo luận ở đây là sử dụng mệnh đề OUTPUT trong SQL 2005. Trong trường hợp này, bạn chỉ cần thêm mệnh đề đầu ra vào phần chèn của mình, rồi bắt tập bản ghi đó từ mã của bạn. Điều này hoạt động tốt khi chèn nhiều bản ghi thay vì chỉ 1 ...
use tempdb
go
create table table1
(ID int identity)
go
insert table1
output inserted.ID
default values;
--OR...
insert table1
output inserted.$identity
default values;