আমি অনন্য ক্রয় অর্ডার নম্বর উত্পন্ন করার চেষ্টা করছি যা 1 থেকে শুরু হয় এবং 1 দ্বারা বৃদ্ধি হয় I আমার কাছে এই স্ক্রিপ্টটি ব্যবহার করে একটি পোনম্বার টেবিল তৈরি করা হয়েছে:
CREATE TABLE [dbo].[PONumbers]
(
[PONumberPK] [int] IDENTITY(1,1) NOT NULL,
[NewPONo] [bit] NOT NULL,
[DateInserted] [datetime] NOT NULL DEFAULT GETDATE(),
CONSTRAINT [PONumbersPK] PRIMARY KEY CLUSTERED ([PONumberPK] ASC)
);
এবং এই স্ক্রিপ্টটি ব্যবহার করে একটি সঞ্চিত পদ্ধতি:
CREATE PROCEDURE [dbo].[GetPONumber]
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO [dbo].[PONumbers]([NewPONo]) VALUES(1);
SELECT SCOPE_IDENTITY() AS PONumber;
END
সৃষ্টির সময়, এটি দুর্দান্ত কাজ করে। সঞ্চিত পদ্ধতিটি চললে, এটি পছন্দসই সংখ্যায় শুরু হয় এবং 1 দ্বারা বৃদ্ধি হয়।
আশ্চর্যের বিষয়টি হ'ল, আমি যদি আমার কম্পিউটারটি বন্ধ করে রাখি বা হাইবারনেট করি, তবে পরবর্তী সময় প্রক্রিয়াটি চালানোর পরে, ক্রমটি প্রায় 1000 দ্বারা এগিয়ে গেছে advanced
নীচে ফলাফল দেখুন:
আপনি দেখতে পাচ্ছেন যে সংখ্যাটি 8 থেকে 1002 এ চলে গেছে!
- ইহা কি জন্য ঘটিতেছে?
- আমি কীভাবে নিশ্চিত করব যে সংখ্যাগুলি এর মতো এড়ানো যায় না?
- এসকিউএল এর জন্য যে সংখ্যাগুলি উত্পন্ন করা দরকার তা হ'ল:
- ক) গ্যারান্টিযুক্ত অনন্য।
- খ) কাঙ্ক্ষিত পরিমাণ দ্বারা বৃদ্ধি।
আমি স্বীকার করি আমি কোনও এসকিউএল বিশেষজ্ঞ নই। SCOPE_IDENTITY () কী করে আমি ভুল বুঝি? আমার কি আলাদা পদ্ধতি ব্যবহার করা উচিত? আমি এসকিউএল ২০১২+ এর সিকোয়েন্সগুলিতে দেখেছি, তবে মাইক্রোসফ্ট বলেছে যে তারা ডিফল্টরূপে অনন্য হওয়ার নিশ্চয়তা দেয় না।