পারফরম্যান্স বাদে, তাদের সবারই আলাদা অর্থ রয়েছে।
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
, এবং নিশ্চিত করুন যে আপনি যে এক রিটার্ন আপনি আসলে প্রয়োজন ব্যবহার করছেন।