2008-11-04 20 views
30

में ऑटोइनक्रिकमेंट प्राथमिक कुंजी के लिए ऊपरी सीमा SQL सर्वर में एक ऑटोइनक्रिकमेंट प्राथमिक कुंजी के लिए ऊपरी सीमा क्या है? क्या होता है जब SQL सर्वर ऑटोइनक्रिकमेंट प्राथमिक कुंजी इसकी ऊपरी सीमा तक पहुंच जाती है?SQL सर्वर

उत्तर

35

जोएल का जवाब सही है, यह आपके द्वारा उपयोग किए जाने वाले डेटाटाइप की ऊपरी सीमा है।

यहाँ उनमें से दो का एक उदाहरण है:

  • पूर्णांक: 2^31-1 (2.147.483.647)
  • bigint: वास्तव में 2^63-1 (9.223.372.036.854.775.807)

मेरे पास है मैंने जिस नौकरी पर काम किया था उस पर सीमा को मारा। वास्तविक त्रुटि है:

 
    Msg 8115, Level 16, State 1, Line 1 
    Arithmetic overflow error converting IDENTITY to data type int. 
    Arithmetic overflow occurred. 

इस पर कुछ फिक्स हैं जो मैं अपने सिर के ऊपर से सोच सकता हूं। संख्या 1 शायद बहुत कठिन है और बहुत संभावना नहीं है, संख्या 2 आसान है, लेकिन शायद आपके कोड बेस में समस्याएं पैदा होंगी।

  1. यदि पहचान कॉलम आपके लिए कोई फर्क नहीं पड़ता है (यह एक विदेशी कुंजी नहीं है) तो आप केवल डेटाबेस को संशोधित कर सकते हैं और पहचान कॉलम रीसेट कर सकते हैं।
  2. अपनी पहचान कॉलम को एक बड़ी संख्या में बदलें। तो उदाहरण के लिए यदि आपने एक int को बहकाया है, तो अपनी पहचान कॉलम को एक बड़े int में बदलें। अच्छी किस्मत बहती है :)

शायद अन्य फिक्स हैं, लेकिन कोई जादू बुलेट आसान नहीं है। मुझे उम्मीद है कि यह ऐसी तालिका में नहीं होता है जो संबंधों के समूह का केंद्र है, क्योंकि यदि ऐसा होता है, तो आप बहुत दर्द में हैं। यह एक कठिन फिक्स नहीं है, सिर्फ एक कठिन और लंबा है।

4

यह डेटाटाइप पर निर्भर करता है। यदि आप बिगिन का उपयोग करते हैं, तो आप कभी भी अतिप्रवाह होने की संभावना नहीं रखते हैं। यहां तक ​​कि एक सामान्य int आपको कुछ अरब पंक्तियां देता है। मैंने कभी बहकाया नहीं है, इसलिए मैं आपको नहीं बता सकता कि क्या होता है यदि आप करते हैं।

+0

मैं int (11) का उपयोग कर रहा हूं इसके बारे में कैसे? कितने डेटा?और क्या हुआ अगर auto_increment overflowed? –

0

डेटा प्रकार विवरण:

BIGINT Integer data from -2^63 through 2^63 - 1 

INT  Integer data from -2^31 through 2^31 - 1 

SMALLINT Integer data from -2^15 through 2^15 - 1 

TINYINT Integer data from 0  through 255 

जब आप ऊपरी सीमा autoincrement निचली सीमा को जाता है तक पहुँचने।

2

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

कॉलम को बिगिनट में बदलना पड़ा। कुछ धीमी सर्वर पर 26 जीबी डेटाबेस पर, लगभग 30 मिनट लग गए। डेटाबेस के संग्रह संस्करण (150 जीबी या तो) पर यह काफी लंबा लगा।

सौभाग्य से, इस तालिका के लिए बहुत से रिश्ते नहीं हैं इसलिए दर्द काफी मामूली था।

1

बी सी सी CHECKIDENT (SomeTable, Reseed, 1)

यह मेज पर 1 के लिए पहचान रीसेट करता है 'SomeTable'

अगर यह यह करने के लिए सबसे अच्छा तरीका है सुनिश्चित नहीं हैं।