SELECT SCOPE_IDENTITY()
menggunakan @@IDENTITY dapat memberikan hasil yang tidak diharapkan, jadi berhati-hatilah dalam menggunakannya. Pemicu yang menyisipkan catatan ke tabel lain akan menyebabkan nilai @@IDENTITY berubah - di mana SCOPE_IDENTITY() akan memberi Anda identitas terakhir hanya dari cakupan Anda saat ini.
Berikut adalah contoh yang akan menunjukkan perbedaan antara @@IDENTITY dan SCOPE_INSERT() dan bagaimana mereka dapat mengembalikan nilai yang berbeda..
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
Opsi lain yang belum pernah dibahas siapa pun di sini adalah menggunakan klausa OUTPUT yang ada di SQL 2005. Dalam kasus ini, Anda hanya perlu menambahkan klausa output ke sisipan Anda, dan kemudian menangkap recordset itu dari kode Anda. Ini berfungsi dengan baik saat menyisipkan beberapa catatan, bukan hanya 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;