मैं 1 से शुरू होने वाले अद्वितीय खरीद ऑर्डर नंबर उत्पन्न करने की कोशिश कर रहा हूं और 1 से वृद्धि कर रहा हूं। मेरे पास इस स्क्रिप्ट का उपयोग करके एक PONumber टेबल बनाई गई है:
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 तक आगे बढ़ गया है।
नीचे देखें परिणाम:
आप देख सकते हैं कि संख्या 8 से 1002 तक उछल गई!
- ये क्यों हो रहा है?
- मैं यह कैसे सुनिश्चित करूं कि नंबर उस तरह से स्किप न हों?
- SQL के लिए सभी की आवश्यकता है कि संख्याएँ उत्पन्न करें:
- क) अद्वितीय गारंटी।
- ख) वांछित राशि से वृद्धि।
मैं मानता हूँ कि मैं एक SQL विशेषज्ञ नहीं हूँ। क्या मुझे गलत समझ है कि SCOPE_IDENTITY () क्या करता है? क्या मुझे एक अलग दृष्टिकोण का उपयोग करना चाहिए? मैंने SQL 2012+ में अनुक्रमों में देखा, लेकिन Microsoft का कहना है कि वे डिफ़ॉल्ट रूप से अद्वितीय होने की गारंटी नहीं हैं।