परिजनों ने आपको दिखाया है कि आप कैसे पहचान मूल्य को रीसेट कर सकते हैं, लेकिन एक विकास के माहौल के बाहर जब आप वास्तव में सभी डेटा निकाल रहे हैं , तो आपको ऐसा करने की आवश्यकता क्यों है?
मुझे आशा है कि जब आप उत्पादन में होते हैं, तो आपके पास पहचान मूल्यों का एक क्रम बनाए रखने का इरादा नहीं होता है। और मुझे आशा है कि आप वास्तव में IDENTITY मूल्यों को हार्ड-कोड करने के लिए अपना कोड नहीं लिख रहे हैं। यदि ये सार्थक ID मान हैं तो आपको IDENTITY गुण का उपयोग करना बंद कर देना चाहिए।
कुछ चीजें हैं जो इसे होने से रोकेंगी:
- यदि किसी लेन-देन के दौरान एक पहचान मूल्य असाइन किया गया है, और लेन-देन वापस ले लिया गया है, तो मान "वापस नहीं दिया गया" है और अगला मूल्य कभी भी उपयोग नहीं किया जाने वाला + 1 होगा।
- यदि बाद में कोई पंक्ति हटा दी जाती है, तो अंतराल में भरने के लिए पहचान कभी वापस नहीं आती है।
- SQL Server 2012 में एक सक्रिय बग है जिसे
तब तक ठीक नहीं किया जाएगा जब तक कि SQL Server 2014 को ठीक नहीं किया जाएगा (जब तक कि आप एक अनजाने और बहुत महंगे ट्रेस ध्वज का उपयोग नहीं करते हैं) जिससे आपके IDENTITY कॉलम से 1000 मान तक का त्याग करना प्रतीत होगा । कनेक्ट पर बग बताता है कि यह उपलब्धता समूहों से जुड़े फेलओवर की घटनाओं तक सीमित है लेकिन मैं आपको आश्वस्त कर सकता हूं कि बग इससे कहीं अधिक व्यापक है।
संक्षेप में, यदि आप अंतराल की परवाह करते हैं या इन मूल्यों को विशिष्ट अर्थ देना चाहते हैं, तो पहचान का उपयोग करना बंद कर दें। तालिका को गिराएं और फिर से बनाएं और जब आपको मूल्यों को हटाने और फिर से आबाद करने की आवश्यकता हो, तो या तो एक अपडेट करें, या उस कॉलम के लिए हार्ड-कोडित मूल्यों के साथ एक प्रविष्टि करें।
एक तरफ के रूप में, प्राथमिक कुंजी और पहचान एक ही बात नहीं है। एक पहचान स्तंभ एक प्राथमिक कुंजी नहीं है जब तक कि आप स्पष्ट रूप से इसे इस तरह परिभाषित नहीं करते हैं, और आपके पास निश्चित रूप से एक प्राथमिक कुंजी हो सकती है जो पहचान स्तंभ नहीं है।