SELECT SCOPE_IDENTITY()
@@ पहचान का उपयोग करने से अनपेक्षित परिणाम हो सकते हैं, इसलिए सावधान रहें कि आप उसका उपयोग कैसे करते हैं। अन्य तालिकाओं में रिकॉर्ड डालने वाले ट्रिगर @@ पहचान मान को बदल देंगे - जहां SCOPE_IDENTITY() आपको केवल आपके वर्तमान दायरे से अंतिम पहचान देगा।
यहां एक नमूना दिया गया है जो @@ पहचान और SCOPE_INSERT() के बीच का अंतर दिखाएगा और वे अलग-अलग मान कैसे लौटा सकते हैं..
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
एक अन्य विकल्प जिस पर यहां किसी ने चर्चा नहीं की है, वह है OUTPUT क्लॉज का उपयोग करना जो कि SQL 2005 में है। इस मामले में, आपको केवल अपने इंसर्ट में आउटपुट क्लॉज जोड़ना होगा, और फिर उस रिकॉर्डसेट को अपने कोड से पकड़ना होगा। यह केवल 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;