प्रदर्शन के अलावा, उनके पास सभी अलग-अलग अर्थ हैं।
SCOPE_IDENTITY()
आपको अंतिम पहचान मूल्य मौजूदा दायरे में सीधे किसी भी तालिका में डाला जाएगा (गुंजाइश = बैच, संग्रहीत कार्यविधि, आदि) के , लेकिन भीतर नहीं, कहे, एक ट्रिगर जिसे वर्तमान दायरे द्वारा निकाल दिया गया था)।
IDENT_CURRENT()
आप से एक विशिष्ट तालिका में सम्मिलित पिछले पहचान मूल्य दे देंगे किसी भी , गुंजाइश द्वारा किसी भी उपयोगकर्ता ।
@@IDENTITY
टेबल या स्कोप की परवाह किए बिना, आपको वर्तमान कनेक्शन के लिए सबसे हाल के INSERT स्टेटमेंट द्वारा उत्पन्न अंतिम पहचान मूल्य प्रदान करता है। (साइड नोट: एक्सेस इस फ़ंक्शन का उपयोग करता है, और इस प्रकार ट्रिगर्स के साथ कुछ समस्याएँ हैं जो पहचान स्तंभों के साथ तालिकाओं में मान सम्मिलित करते हैं।)
यदि तालिका में नकारात्मक पहचान चरण है, या खेलने के साथ पंक्तियाँ डाली गई हैं, तो उपयोग करना MAX()
या TOP 1
आपको पूरी तरह से गलत परिणाम दे सकता है SET IDENTITY_INSERT
। इन सभी को प्रदर्शित करने वाली एक स्क्रिप्ट यहां दी गई है:
CREATE TABLE ReverseIdent (
id int IDENTITY(9000,-1) NOT NULL PRIMARY KEY CLUSTERED,
data char(4)
)
INSERT INTO ReverseIdent (data)
VALUES ('a'), ('b'), ('c')
SELECT * FROM ReverseIdent
SELECT IDENT_CURRENT('ReverseIdent') --8998
SELECT MAX(id) FROM ReverseIdent --9000
SET IDENTITY_INSERT ReverseIdent ON
INSERT INTO ReverseIdent (id, data)
VALUES (9005, 'd')
SET IDENTITY_INSERT ReverseIdent OFF
SELECT IDENT_CURRENT('ReverseIdent') --8998
SELECT MAX(id) FROM ReverseIdent --9005
सारांश: छड़ी के साथ SCOPE_IDENTITY()
, IDENT_CURRENT()
या @@IDENTITY
, और सुनिश्चित करें कि आप उस का उपयोग कर रहे हैं जो आपको वास्तव में जरूरत है जो वापस लौटाता है।