चयन क्वेरी पर अंकगणित अतिप्रवाह


9

मुझे एक साधारण चयन कथन में अंकगणितीय अतिप्रवाह का सामना करना पड़ा। क्वेरी नीचे की तरह थी

SELECT [SaleValue] FROM Sales

[SaleValue]डेटा प्रकार का था decimal(9,0)और एक संगणित कॉलम नहीं था।

ऐसा होने का कारण यह था कि किसी तरह कॉलम में एक पंक्ति थी जहां यह फ़ील्ड निर्दिष्ट डेटाटाइप की तुलना में एक मूल्य GREATER संग्रहीत कर रहा था, जैसे decimal(10,0)

जब मैं स्तंभ का आकार बढ़ाता हूं तो मुझे केवल काम करने के लिए चयन मिल सकता है। प्रश्न तालिका में दो अन्य स्तंभों और पंक्तियों में दो अन्य उदाहरण हैं।

यह स्थिति कैसे संभव थी? पहली बार कॉलम में आउट ऑफ रेंज वैल्यू को कैसे बचाया गया?

मैं Microsoft SQL सर्वर का उपयोग कर रहा हूँ + यह एक आधार तालिका है, न कि एक दृश्य।


1
एक ही संभव तरीका है जिसके बारे में मैं सोच सकता हूं कि ऐसा होने के लिए डीएसी के माध्यम से सिस्टम टेबल्स को संपादित करना होगा - एक काफी हिंसक प्रक्रिया जो कि कोई व्यक्ति उम्मीद करता है कि आपको बताएगा कि क्या यह डीबी के लिए किया गया था। फिर भी मुझे यकीन नहीं है कि यह अच्छी तरह से काम करेगा (या संभव भी हो सकता है)। उसके बाहर, हमें वास्तव में अपने लिए इस स्थिति को देखने के लिए एक रिप्रो स्क्रिप्ट की आवश्यकता है और मुझे संदेह है कि रिप्रो बनाने से, यदि संभव हो तो, आसानी से प्रयोग के वर्षों लग सकते हैं।
Damien_The_Unbeliever

इससे भी बदतर, बस याद है कि 9/10 स्टोरेज साइज के लिए एक कटओवर पॉइंट है decimal- a decimal(9,0)को 5 बाइट्स पर कब्जा करना चाहिए, decimal(10,0)9. मुझे लगता है कि इसकी संभावना कम है कि आप सिस्टम टेबल्स को एडिट करके ऐसा कर सकते हैं क्योंकि आपके पास नहीं होगा प्रत्येक पंक्ति में डेटा के लिए सही भंडारण आकार।
Damien_The_Unbeliever

1
@Damien_The_Unbeliever पता नहीं कैसे पुन: पेश करने के लिए है। मुझे यह पता लगाने में एक घंटे का समय लगा कि क्या हुआ। इसे देखना सूखे पानी या ठंडी गर्मी को देखने जैसा था। ईमानदारी से, इसने मुझे छोड़ दिया।

जवाबों:


15

यह कई मायनों में हो सकता है, उदाहरण के लिए SQL Server 2005 और बाद के संस्करणों में समस्या निवारण DBCC त्रुटि 2570 में वर्णित है :

निम्न कारणों से SQL सर्वर डेटाबेस में अमान्य या आउट-ऑफ-रेंज डेटा संग्रहीत किया जा सकता है:

  • बल्क यूटिलिटी जैसे बल्क इंसर्ट मेथड्स का उपयोग करते समय स्रोत में अवैध डेटा मौजूद था।
  • SQL सर्वर पर किए गए RPC ईवेंट कॉल के माध्यम से अमान्य डेटा पारित किया गया था।
  • भौतिक डेटा भ्रष्टाचार के अन्य संभावित कारणों ने एक अमान्य स्थिति में स्तंभ मान छोड़ दिया।

उस लेख में विषय पर बहुत सारी उपयोगी जानकारी है। मूल बातें के लिए, विशेष रूप से के लिए प्रलेखन DBCC CHECKDBऔर DATA_PURITYविकल्प देखें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.