आकार की परवाह किए बिना कई डेवलपर्स और अनुप्रयोगों के बीच यह अभी भी एक बहुत ही सामान्य मुद्दा है।
दुर्भाग्य से ऊपर दिए गए सुझाव सभी परिदृश्यों को ठीक नहीं करते हैं, अर्थात साझा होस्टिंग, आप -272 स्टार्टअप पैरामीटर सेट करने के लिए अपने होस्ट पर भरोसा नहीं कर सकते।
इसके अलावा, यदि आपके पास मौजूदा टेबल्स हैं जो प्राथमिक कुंजियों के लिए इन पहचान स्तंभों का उपयोग करते हैं, तो यह उन स्तंभों को छोड़ने और बीएस अनुक्रम वर्कअराउंड का उपयोग करने के लिए नए लोगों को फिर से बनाने का एक बड़ा प्रयास है। अनुक्रम वर्कअराउंड केवल तभी अच्छा होता है जब आप SQL 2012+ में स्क्रैच से नए टेबल को डिज़ाइन कर रहे हों
लब्बोलुआब यह है, अगर आप Sql Server 2008R2 पर हैं, तो STAY ON IT। गंभीरता से, इस पर बने रहें। जब तक Microsoft यह स्वीकार नहीं करता है कि उन्होंने एक बड़ा बग पेश किया है, जो अभी भी Sql Server 2016 में है, तब तक हमें इसे अपग्रेड नहीं करना चाहिए और जब तक वे इसे FIX नहीं करते।
Microsoft ने सीधे तौर पर एक ब्रेकिंग परिवर्तन की शुरुआत की, यानी उन्होंने एक कामकाजी एपीआई को तोड़ दिया जो अब डिज़ाइन के अनुसार काम नहीं करता है, इस तथ्य के कारण कि उनका सिस्टम पुनरारंभ पर अपनी वर्तमान पहचान भूल जाता है। कैश या कैश नहीं, यह अस्वीकार्य है, और ब्रायन के नाम से माइक्रोसॉफ्ट डेवलपर को दुनिया को यह बताने के बजाय कि यह "डिजाइन द्वारा" है और एक "फीचर" है, की जरूरत है। निश्चित रूप से, कैशिंग एक विशेषता है, लेकिन अगली पहचान क्या होनी चाहिए, इसका ट्रैक खोना नहीं है। यह एक टूटा हुआ बग है !!!
मैं अपने द्वारा उपयोग किए जाने वाले वर्कअराउंड को साझा करूंगा, क्योंकि My DB की साझा होस्टिंग सर्वर पर हैं, साथ ही, मैं अपने प्राथमिक कुंजी कॉलम को ड्राप और रीक्रिएट नहीं कर रहा हूं, जो कि एक विशाल पीटीए होगा।
इसके बजाय, यह मेरी शर्मनाक हैक है (लेकिन इस पीओएस बग के रूप में शर्मनाक नहीं है जो कि माइक्रोसॉफ्ट ने पेश किया है)।
हैक / फिक्स:
अपने सम्मिलित आदेशों से पहले, बस प्रत्येक प्रविष्टि से पहले अपनी पहचान फिर से बनाएं। यदि आप अपने Sql सर्वर इंस्टेंस पर व्यवस्थापक नियंत्रण नहीं रखते हैं, तो यह फिक्स केवल अनुशंसित है, अन्यथा मेरा सुझाव है कि सर्वर को पुनः आरंभ करने पर।
declare @newId int -- where int is the datatype of your PKey or Id column
select @newId = max(YourBuggedIdColumn) from YOUR_TABLE_NAME
DBCC CheckIdent('YOUR_TABLE_NAME', RESEED, @newId)
आपके डालने से ठीक पहले वे 3 पंक्तियाँ, और आपको जाने के लिए अच्छा होना चाहिए। यह वास्तव में प्रदर्शन को इतना प्रभावित नहीं करेगा, अर्थात यह ध्यान देने योग्य नहीं होगा।
सौभाग्य।
order by ReceiptNo
अपनी क्वेरी में जोड़ते हैं तो क्या वे रिकॉर्ड वास्तव में नहीं हैं? क्या आप सुनिश्चित हैं कि जब रिकॉर्ड डाले जा रहे हैं तो कोई त्रुटि नहीं है? यदि कोई रिकॉर्ड सम्मिलित करने का प्रयास करता है और पहचान विफल हो जाती है, तो रिकॉर्ड हटाए जाने पर एक ही बात। यदि रिकॉर्ड हटा दिए जाते हैं तोReceiptNo
रीसेट नहीं होता है। क्या आप तालिका के लिए तालिका बना सकते हैंFee
?