मेरे पास एक जटिल डेटा दृश्य है जो जानकारी को दोबारा जोड़ता है और सारांशित करता है।मैं डेटा व्यू के भीतर से 'अंकगणित ओवरफ़्लो' से संबंधित त्रुटियों को कैसे अनदेखा कर सकता हूं?
प्रत्येक रात एक निर्धारित कार्य एक संग्रहित प्रक्रिया चलाता है जो डेटा दृश्य से सभी डेटा का चयन करता है, और इसे एक तालिका में सम्मिलित करता है ताकि उपयोगकर्ता डेटा पर एक चयनित कथन चलाने से डेटा को क्वेरी और विश्लेषण कर सकें राय।
अभिभावक तालिका में कुछ सौ हजार रिकॉर्ड होते हैं और निर्यात से सेट परिणाम आकार में 1,000,000 से अधिक रिकॉर्ड होते हैं।
अधिकांश रातों के लिए निर्यात प्रक्रिया किसी भी परेशानी के बिना काम करती है, हालांकि, यदि कोई उपयोगकर्ता हमारे मास्टर ईआरपी सिस्टम के भीतर गलत मान डालता है, तो यह रात की प्रक्रिया को दुर्घटनाग्रस्त कर देगा क्योंकि दशमलव फ़ील्ड में से एक में एक मान होगा मुझे कुछ रूपांतरणों के भीतर फिट करना है जो मुझे डेटा पर बनाना है। विशिष्ट, ग़लत क्षेत्र को डिबग करना और ढूंढना बहुत कठिन और समय लेने वाला हो सकता है।
इसके साथ, मैंने दो SQL सेटिंग्स NUMERIC_ROUNDABORT
और ARITHABORT
के बारे में पढ़ा है। ये मेरी समस्या को हल करने के लिए सही विकल्प की तरह लगता है, हालांकि, मैं उन्हें अपने डेटा व्यू या संग्रहीत प्रक्रिया के साथ काम करने के लिए प्रतीत नहीं कर सकता।
मेरी संग्रहीत प्रक्रिया एक ट्रंकेट और INSERT कथन से अधिक कुछ नहीं है। मैंने जोड़ा ...
SET NUMERIC_ROUNDABORT OFF
SET ARITHABORT OFF
... एसपी की शुरुआत में और इससे मदद नहीं मिली। मुझे लगता है कि ऐसा इसलिए है क्योंकि डेटा तकनीकी दृष्टि से जुड़े कोड के भीतर तकनीकी रूप से त्रुटि हो रही है।
अगला, मैंने डेटा व्यू में दो विस्तारित गुण जोड़ने की कोशिश की, उम्मीद है कि यह काम करेगा। ऐसा नहीं हुआ
क्या कोई तरीका है कि मैं इन SQL गुणों को गोल करने वाली त्रुटियों को अनदेखा करने के लिए सेट कर सकता हूं ताकि मैं अपने डेटा दृश्य से अपना डेटा निर्यात कर सकूं?
मैं ज्यादातर लोगों के लिए जानता हूं, एसओ उत्तरदाताओं के रूप में, हमारा पहला झुकाव कोड मांगना है। इस मामले में, हालांकि, कोड बेहद जटिल और स्वामित्व दोनों है। मैं उन परिभाषाओं को ठीक करने के बारे में जानता हूं जो कभी-कभी अतिप्रवाह सबसे आदर्श समाधान है, लेकिन इस परिस्थिति में, इन प्रकार की त्रुटियों को अनदेखा करना अधिक कुशल है क्योंकि वे इस तरह के दुर्लभ आधार पर होते हैं और समस्या निवारण के लिए बहुत मुश्किल होते हैं।
इस व्यवहार को अनदेखा करने के लिए मैं क्या कर सकता हूं?
अद्यतन
संयोग से, मेरा मानना है कि मैं इस मुद्दे की जड़ पाया है हो सकता है, फिर भी, मुझे पता नहीं क्यों यह होने वाली की जाएगी है। यह अभी से नहीं बना है।
मेरी तालिका दृश्य के माध्यम से, मेरे पास विभिन्न फ़ील्ड हैं जिनकी गणना की जाती है। चूंकि इन क्षेत्रों को तालिका में फ़ील्ड में फिट करने की आवश्यकता है जिन्हें decimal (12, 5)
के रूप में परिभाषित किया गया है, इसलिए मैं हमेशा CAST(... AS DECIMAL(12, 5))
खंडों में दृश्य फ़ील्ड स्टेटमेंट को लपेटता हूं।
मौका से, मैं एक विषमता पर ठोकर खाई। मैंने यह देखने का फैसला किया कि कैसे एसएसएमएस ने मेरे डेटा व्यू को देखा "। एसएसएमएस ऑब्जेक्ट एक्सप्लोरर में, मैंने दृश्य -> [मेरा दृश्य]-कॉलम अनुभाग का विस्तार किया और मैंने देखा कि फ़ील्ड में से एक को decimal (13, 5)
के रूप में परिभाषित किया गया था।
मुझे लगता है कि मैंने अपने कास्टिंग बयान में से एक में गलती की होगी लेकिन तालिका दृश्य के लिए कोड भरने के बाद, decimal(13, 5)
फ़ील्ड के लिए कोई परिभाषा नहीं है ?! मेरा एकमात्र अनुमान यह है कि एसएसएमएस दृश्य क्षेत्र के बारे में परिभाषा को परिणामी डेटा से लिया जाना चाहिए। हालांकि, मुझे कोई संकेत नहीं है कि यह कैसे हो सकता है क्योंकि प्रत्येक फ़ील्ड decimal(12, 5)
पर है।
मैं जानना चाहता हूं कि यह क्यों हो रहा है, लेकिन फिर, मेरा मूल प्रश्न अभी भी खड़ा है। तालिका तालिका पर मैं कैसे और किस एसईटी कथन को परिभाषित कर सकता हूं जो आपके सभी अंकगणित अतिप्रवाहों को अनदेखा कर देगा और गलत डेटा वाले फ़ील्ड में शून्य मूल्य लिखेंगे?
अंतिम टिप्पणियाँ
मैं जवाब के रूप में HeavenCore की प्रतिक्रिया में चिह्नित किया है, क्योंकि यह मेरे सवाल को संबोधित करता है लेकिन यह मेरी मूल समस्या हल नहीं किया गया है।
कुछ समस्या निवारण और काम पर मेरा निर्यात प्राप्त करने का प्रयास करने के प्रयासों के बाद, मुझे एक अलग दृष्टिकोण की कोशिश करनी होगी। मैं अभी भी निर्यात करने के लिए निर्यात नहीं कर सकता, भले ही मैं NUMERIC_ROUNDABORT
और ARITHABORT
गुण OFF
पर सेट करता हूं।
यह मान हो रहा हो करने के लिए एक अलग डेटा प्रकार के लिए डाली हो रही किया जाना चाहिए जिसमें से यह संग्रहीत किया जाता है सही किया? मान लीजिए यह मामला है, डालने के स्तर पर कास्टिंग किया जा रहा है या सम्मिलित स्तर से पहले चयन किया जा रहा है? उदाहरण के लिए - यदि आप वहां से कुछ दुष्ट डेटा के साथ मैन्युअल रूप से इसे चुनते हैं तो एक त्रुटि उत्पन्न करने वाला दृश्य है? (उदाहरण के लिए, क्या आप दृश्य के भीतर एक आईएनटी में कॉलम कास्टिंग कर रहे हैं - सम्मिलित होने के विपरीत ओवरफ़्लो हो सकता है?) - यदि दृश्य ठीक से चयन करता है, तो आप अपने INSERT को संशोधित कर सकते हैं ... LEN के आधार पर कुछ मानों को बाहर करने के लिए चयन कथन()? – HeavenCore
त्रुटि तब होती है जब आप डेटा दृश्य से डेटा चुनते हैं। डेटा व्यू के भीतर कास्ट स्टेटमेंट्स हैं। यह कास्टिंग अनिवार्य है और क्षेत्र के लिए सभी अंकगणितीय होने के बाद होता है। – RLH
यदि आप अभी के लिए दृश्य को अनदेखा करते हैं और 'SET NUMERIC_ROUNDABORT OFF' और' सेट एरिथैबर्ट ऑफ़ 'सेट के साथ मैन्युअल रूप से दृश्य विवरण को चलाते हैं, तो क्या क्वेरी काम करती है? (ध्यान दें कि जब आप कोई नई क्वेरी विंडो खोलते हैं तो एसएसएमएस इन सेटिंग्स को अदृश्य रूप से सेट करता है, एसएसएमएस विकल्प जांचें) – HeavenCore