আমার কাছে একটি সঞ্চিত প্রক্রিয়া তৈরি করার প্রয়োজন রয়েছে যা একটি টিএসকিউএল অনুক্রমকে অনুকরণ করে। এটি হ'ল এটি প্রতিটি কলটিতে সর্বদা একটি বর্ধমান স্বতন্ত্র পূর্ণসংখ্যার মান দেয়। তদ্ব্যতীত, কোনও পূর্ণসংখ্যা যদি এতে পাস হয় তবে সেই মানটি ফেরত দেওয়া উচিত যদি এর আগে কোনও ফলাফল বৃহত্তর বা পরবর্তী সর্বোচ্চ পূর্ণসংখ্যার উপলব্ধ না হয়। এটি বলা ছাড়াই যায় যে একই সময়ে এই এসপিকে কল করার জন্য একাধিক ক্লায়েন্ট থাকতে পারে।
মেটাকি বারচার (সর্বাধিক) এবং মেইটভ্যালু লং বিগ আইটের কলামগুলির সাথে একটি সারণী মেটাআইএনফো দেওয়া হয়েছে। আশা করা যায় যে 'ইন্টারনাল-আইডি-লাস্ট' এর মেটাকি দিয়ে সারিটি নির্ধারিত সর্বশেষ সর্বোচ্চ মান ধারণ করবে। আমি নিম্নলিখিত সঞ্চিত পদ্ধতি তৈরি করেছি:
CREATE PROCEDURE [dbo].[uspGetNextID]
(
@inID bigInt
)
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRANSACTION
UPDATE MetaInfo WITH (ROWLOCK)
SET MetaValueLong = CASE
WHEN ISNULL(MetaValueLong,0) > @inID THEN MetaValueLong+1
ELSE @inID+1
END
WHERE MetaKey = 'Internal-ID-Last'
SELECT MetaValueLong
FROM MetaInfo
WHERE MetaKey = 'Internal-ID-Last'
COMMIT TRANSACTION
END
আমার প্রশ্নটি সহজভাবে, এই সঞ্চিত পদ্ধতিটি প্রত্যাশার মতো কাজ করে (সমস্ত কলকারীদের একটি অনন্য ফলাফল দেওয়া হবে)?