一般使用 SCOPE_IDENTITY() 較正確

@@IDENTITY 是傳回全域識別值,可能取得當下在目前範圍外的更新值,例如觸發程序(包括複寫使用的巢狀觸發程序),而SCOPE_IDENTITY()則傳回使用者陳述式範圍內最新的識別值,範例如下

use tempdb
go

create table t(c1 int identity,c2 varchar(10))
create table t2(c1 int identity,c2 varchar(10))
go
insert t2(c2) values(‘1’)
go

create trigger trg on t
for insert
as
insert t2(c2) select c2 from inserted
go

create proc sp
as
insert t(c2) values(‘a’)
select @@IDENTITY [@@identity],SCOPE_IDENTITY() [Scope_Identity]
go

exec sp

執行結果

image

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

%d 位部落客按了讚: