2008-11-04 11 views
10

क्या होता है जब SQL सर्वर 2005 किसी पहचान कॉलम के लिए अधिकतम तक पहुंचने के लिए होता है? क्या यह शुरुआत से शुरू होता है और अंतराल को फिर से भरना शुरू करता है?SQL 2005 में क्या होता है जब यह ऑटोनंबर कॉलम के लिए संख्या से बाहर हो जाता है?

ऐसा होने पर SQL Server 2005 का व्यवहार क्या है?

उत्तर

13

अधिकतम मूल्य पर पहुंचने पर आपको ओवरफ़्लो त्रुटि मिल जाएगी। यदि आप 9,223,372,036,854,775,807 के अधिकतम मूल्य के साथ बिगिन डेटाटाइप का उपयोग करते हैं तो यह संभवतः कभी भी मामला नहीं होगा।

त्रुटि संदेश आपको मिल जाएगा, इस तरह दिखेगा: जहाँ तक मुझे पता है एमएस एसक्यूएल पहचान अंतराल को भरने के लिए कोई सुविधा प्रदान करता है

Msg 220, Level 16, State 2, Line 10 
Arithmetic overflow error for data type tinyint, value = 256. 

(Source)

है, तो आप या तो करना होगा इसे स्वयं करें या पहचान कॉलम के डेटाटाइप को बदलें।

इसके अतिरिक्त आप प्रारंभिक मानों को उपयोग करने के लिए मूल्यों की एक बड़ी श्रृंखला प्राप्त करने के लिए प्रारंभिक मूल्य को सबसे छोटे ऋणात्मक संख्या में सेट कर सकते हैं।

Here is a good blog post about this topic

1

यह अंतराल को भर नहीं देगा। इसके बजाय आवेषण विफल हो जाएंगे जब तक कि आप कॉलम की परिभाषा को या तो पहचान छोड़ने के लिए नहीं बदलते हैं और अंतराल को भरने या आकार बढ़ाने (int से bigint तक जाने) का कोई अन्य तरीका ढूंढते हैं या डेटा के प्रकार को बदलते हैं (int से दशमलव तक)) ताकि अधिक पहचान मान उपलब्ध हों।

0

यदि पहचान कॉलम एक इंटीजर है, तो आपका अधिकतम 2,147,483,647 है। यदि आप इसे पार करते हैं तो आपको ओवरफ़्लो त्रुटि मिल जाएगी।

यदि आपको लगता है कि यह एक जोखिम है, तो बस BIGINT डेटाटाइप का उपयोग करें, जो आपको 9,223,372,036,854,775,807 तक देता है। कई पंक्तियों के साथ डेटाबेस तालिका की कल्पना नहीं कर सकता।

आगे की चर्चा here। (एक्सएसएल का उल्लेख किया गया लिंक)।

1

आप नई पंक्तियां डालने में असमर्थ होंगे और जब तक आप समस्या को ठीक नहीं करेंगे तब तक ऊपर सूचीबद्ध त्रुटि संदेश प्राप्त होगा। आप इसे कई तरीकों से कर सकते हैं। यदि आपके पास अभी भी डेटा है और अधिकतम आईडी के नीचे अधिकतम आईडी का उपयोग कर रहे हैं, तो आपको डेटाटाइप बदलना होगा। यदि डेटा नियमित आधार पर शुद्ध हो रहा है और आपके पास एक बड़ा अंतर है जिसका उपयोग नहीं किया जा रहा है, तो आप पहचान संख्या को उस अंतर में सबसे कम संख्या में संशोधित कर सकते हैं। उदाहरण के लिए, पिछली नौकरी पर, हम लेनदेन लॉगिंग कर रहे थे। हमारे पास प्रति माह 40-50 मिलियन थे, लेकिन हम 6 महीने से अधिक उम्र के सबकुछ शुद्ध कर रहे थे, इसलिए हर कुछ सालों में पहचान करीब 2 बिलियन हो जाएगी, लेकिन हमारे पास 1.5 बिलियन से कम आईडी के साथ कुछ भी नहीं होगा, इसलिए हम शोध करेंगे 0 पर वापस। फिर यह संभव है कि इनमें से कोई भी आपके लिए काम नहीं करेगा और आपको एक अलग समाधान मिलना होगा।

0

यदि आप पहचान कॉलम के लिए अधिकतम संख्या हिट करते हैं, तो आप उस तालिका से डेटा को एक बड़ी पहचान कॉलम प्रकार के साथ द्वितीयक तालिका में स्थानांतरित कर सकते हैं और उस नए पहचान मान के लिए प्रारंभिक मान निर्दिष्ट कर सकते हैं पिछले प्रकार के अधिकतम। उस बिंदु से नए पहचान मान जारी रहेगा।

0

आप समय-समय पर "पुराने मूल्यों" को हटाते हैं तो आप सिर्फ बीज बी सी सी CHECKIDENT ('MyTable', Reseed, 0) का उपयोग करते हुए पुनर्स्थापित करने के लिए की जरूरत है;

+0

डीबीसीसी अध्यक्ष ('मायटेबल', रेसड, -2147483647) संभावित रूप से मदद कर सकता है यदि आप पहले ही पंक्तियों को 0-2147483647 भर चुके हैं;) – keithl8041

संबंधित मुद्दे

 संबंधित मुद्दे