2012-07-19 14 views
9

मुझे हाल ही में बीसीपी के साथ काम करते समय एक त्रुटि आई है। यहां त्रुटि है।बीसीपी: त्रुटि = [माइक्रोसॉफ्ट] [एसक्यूएल सर्वर मूल क्लाइंट 10.0] स्ट्रिंग डेटा, दाएं छंटनी

SQLState = 22001, NativeError = 0 त्रुटि = [माइक्रोसॉफ्ट] [एसक्यूएल सर्वर मूल क्लाइंट 10.0] स्ट्रिंग डेटा, सही काट-छांट

मैं एक मचान तालिका में डेटा को अनपैक करने के कोशिश कर रहा हूँ जो डेटा की तुलना में कोई बाधा नहीं है और डेटाटाइप भी काफी बड़े हैं। मेरे पास अलग-अलग तालिकाओं से लगभग 11 फाइलें हैं जिन्हें bcp'd किया जा रहा है और जिनमें से केवल एक फ़ाइल त्रुटियों को अनपॅक करते समय ज़िपित की गई है। यह वह आदेश है जिसे मैं सफलतापूर्वक उपयोग कर रहा हूं। हाल ही में (जब वर्तमान डब्ल्यूएच की प्रतिलिपि बनाने और प्रक्रिया को सुलझाने की कोशिश करते समय) मुझे मुद्दों का सामना करना पड़ रहा है।

BCP.exe employee_details में employee_details.dat -n -E -S "सर्वर" यू सा -पी "पासवर्ड"

मैं आदेशों को बदलने -टी -सी की कोशिश की है - एस ने काम किया जब मैंने प्रारूप को मैन्युअल रूप से दिया। यह एक बहुत बड़ा और महत्वपूर्ण पैकेट है जिसे मुझे अपने डब्ल्यूएच में लोड करने की ज़रूरत है।
मुझे नहीं पता कि मैं यहां एक प्रारूप फ़ाइल देख रहा हूं या नहीं। किसी भी मदद की ज़रूरत है।

धन्यवाद

दालचीनी लड़की।

+0

क्या आप बहुत अधिक विशिष्ट हो सकते हैं? "काफी बड़ा" क्या मतलब है? क्या आप तालिका परिभाषा के लिए वास्तविक रचना तालिका, और फ़ाइल से लंबी लाइनों के कुछ नमूने दिखा सकते हैं? –

+0

अच्छी तरह से हारून, पर्याप्त स्पष्ट नहीं होने के लिए खेद है। मेरी फ़ाइल यातायात या शिखर घंटे के आधार पर कुछ 1000 केबी से 800,000 केबी के बीच हो सकती है। मेरी तालिका में epoch_time (bigint), server_id (varchar), uid_rl (int), apl (int) के रूप में नमूना कॉलम हैं जो पहचान कॉलम हैं और कुछ अन्य कॉलम जिनमें int और float के बीच वितरित किया गया है। धन्यवाद दालचीनी लड़की –

+0

मैं पूरी फाइल, या अस्पष्ट चीजें जैसे 'वर्चर' - 'वर्कर (क्या)' देखने के लिए नहीं कह रहा हूं? इनपुट कैसा दिखता है? आप हमें एक अस्पष्ट त्रुटि संदेश दे रहे हैं जो इंगित करता है कि आप कम से कम एक मान को भरने की कोशिश कर रहे हैं जो कि इसके कॉलम के लिए बहुत बड़ा है, लेकिन आप हमें टेबल परिभाषाएं नहीं बताएंगे या हमें उस डेटा को दिखाएंगे जो इसका कारण बनता है? आप हमें कैसे मदद करने की उम्मीद करते हैं? हो सकता है कि आप अपनी फाइल प्रिंट कर सकें, इसे डार्टबोर्ड पर रख दें, और उस पर एक डार्ट फेंक दें, और यह आपको वह मूल्य दिखाएगा जो समस्या पैदा कर रहा है? यही वह है जो आप हमें अपने लिए करने के लिए कह रहे हैं। –

उत्तर

2

बीसीपी दाएं कटाव त्रुटि तब होती है जब एक ही कॉलम में बहुत अधिक डेटा लगाया जा सकता है। यह अनुचित प्रारूप फ़ाइलों (यदि कोई उपयोग किया जा रहा है) या delimiter के कारण हो सकता है। लाइन टर्मिनेटर (विंडोज़ में सीआरएलएफ या '\ r \ n' है और यूनिक्स के पास \ n ') इस त्रुटि का कारण बन सकता है। उदाहरण आपकी प्रारूप फ़ाइल में विंडोज सीआरएलएफ यानी '\ r \ n' पंक्ति टर्मिनेटर के रूप में है लेकिन फ़ाइल में लाइन अंत के रूप में '\ n' है। इसका मतलब यह होगा कि पूरी फ़ाइल को 1 पंक्ति (बल्कि 1 कॉलम) में फ़िट करना जो सही छंटनी त्रुटि की ओर जाता है।

+0

मैं वास्तव में आपके विश्लेषण को समझ नहीं पा रहा हूं। हालांकि, लाइन फीड के लिए +1 का उल्लेख है। मेरे मामले में, हमारे पास डेटा में लाइन फीड वर्ण थे, जिसे बीसीपी वास्तव में पसंद नहीं करता है। – Richard

3

हमारे लिए यह पता चला कि जिस फ़ाइल को हम अपलोड करने का प्रयास कर रहे थे वह एएनएसआई प्रारूप के बजाय यूनिकोड में था।

एक -एन स्विच है, लेकिन हमारे टेबल में कोई NVARCHAR डेटा नहीं था।

हम सिर्फ एएनएसआई स्वरूप में फ़ाइल को बचाया और यह काम किया, लेकिन आप NVARCHAR डेटा है या आप एन स्विच का उपयोग करना पड़ सकता है अगर

TechNet - Using Unicode Native Format to Import or Export Data

+0

अच्छा है! मैं एएनएसआई के रूप में सहेजी गई सीएसवी फ़ाइल का उपयोग करके आयात करने में कामयाब रहा ... हालांकि अभी भी फ़ाइल के कुछ बिंदु पर कुछ छंटनी त्रुटियां मिल रही हैं ... मैं भी बीसीपी का उपयोग करते समय डबल कोट इंकैप्यूलेशन को हटा नहीं सकता .... कोई विचार? –

+0

@PauloHenrique क्षमा करें मुझे कोई समाधान नहीं है। आप डिलीमीटर को बदल सकते हैं फिर स्टेजिंग टेबल में फ़ील्ड को संभालें। हाल ही में मैं डेटा को .Net DataSet में लोड कर रहा हूं, फिर उसे एक संग्रहीत प्रोसेस में उपयोगकर्ता परिभाषित तालिका प्रकार के रूप में पास कर रहा हूं, लेकिन यह खुद को अधिक लचीलापन नहीं देता है। जब टाइप बदलता है तो मैं टाइप नाम को अनुक्रमित करता हूं। यह अधिक शामिल है लेकिन समस्या निवारण के लिए आसान है। Adhoc सामान के लिए मैं सिर्फ एक एक्सएमएल स्ट्रिंग बना देता हूं और उसके बाद एक संग्रहित प्रो में पार्स करता हूं, लेकिन कई बार डेटा ट्रांसफॉर्मेशन होने पर समस्या निवारण करना मुश्किल होता है। –

0

ओपन फाइलें देखें नोटपैड में ++। टैब देखने के लिए जाओ-> प्रतीकों को दिखाएं-> सभी वर्ण दिखाएं। मुझे .tsv फ़ाइलों में भी एक ही समस्या का सामना करना पड़ रहा था। एक टैब गुम हो गया था।

12

बीसीपी करते समय हमें भी एक ही समस्या का सामना करना पड़ा और यह .dat फ़ाइल में नए लाइन वर्ण के साथ एक मुद्दा साबित हुआ।

नोटपैड ++ में फ़ाइल देखें और नया लाइन वर्ण देखने के लिए "सभी वर्ण दिखाएं" पर क्लिक करें।

File with LineFeed character

बीसीपी -r साथ निम्न त्रुटि फेंकता "\ r \ n" विकल्प अर्थातसाथ आदेश नीचे

bcp dbo.Test in C:\Test.dat -c -t "|" -r "\r\n" -S "DBServerName" -T -E 

"SQLState = 22001, NativeError = 0 त्रुटि = [माइक्रोसॉफ्ट] [एसक्यूएल सर्वर मूल क्लाइंट 10.0] स्ट्रिंग डेटा, सही काट-छांट"

बीसीपी में सभी पंक्तियों का इलाज -r "\ n" या -r "\ r" विकल्प आदेश नीचे के साथ IE के साथ एक ही पंक्ति के रूप में फाइल

bcp dbo.Test in C:\Test.dat -c -t "|" -r "\n" -S "DBServerName" -T -E 

मुद्दा जब हम टी इस्तेमाल किया हल किया गया था वह Haxadecimal मूल्य (0x0A) बीसीपी आदेश में नई लाइन चरित्र के लिए

bcp dbo.Test in C:\Test.dat -c -t "|" -r "0x0a" -S "DBServerName" -T -E 
+0

मेरा सीएसवी लिनक्स/PHP में बनाया गया है और इसमें "एलएफ" रिटर्न चार के रूप में है, और '-r" 0x0a "का उपयोग करके मेरे लिए काम किया है! –

+0

जानना अच्छा है कि यह आपकी मदद करता है .. चेयर !!! –

+0

@MayankJha मेरी फ़ाइल यूनिक्स ईओएल चरित्र के साथ भी लोड नहीं हो रही थी, लेकिन यह नए लाइन चरित्र के लिए हेक्साडेसिमल मान के साथ काम किया - शानदार – Ali

0

मैं जानता हूँ कि इस पुरानी है - लेकिन मैं सिर्फ एक उदाहरण है जहाँ मैं इस त्रुटि हो रही थी भर में आया था, मेरी संख्यात्मक फ़ील्ड में से एक पता चला था और अधिक स्कीमा द्वारा अनुमति दी गई दशमलव।

2

मुझे भी छंटनी संदेश मिल रहा था। खोज मंचों के घंटों के बाद और सुझाए गए समाधानों का प्रयास करने के बाद मुझे अंत में अपना काम मिल गया।

छंटनी संदेश का कारण यह था क्योंकि मैं यह सोचने के लिए पर्याप्त था कि स्वरूप फ़ाइल में कॉलम नाम वास्तव में महत्वपूर्ण था। यह पिछले अंक है जो यह इंगित करता है कि डेटा कहां लोड हो जाता है।

मेरी इनपुट फ़ाइल में तालिका में तीसरे कॉलम के लिए डेटा नहीं था। तो इस तरह मेरी प्रारूप फ़ाइल देखा।

Jones,ABC123,200.67,New phone 
Smith,XYZ564,10.23,New SIM 

मेज की तरह

Cust_Name Varchar(20) 
Cust_Ref Varchar(10) 
Cust_Type Varchar(3) 
Cust_amount Decimal(10,2) 
Cust_Notes Varchar (50) 
Cust_Tel Varchar(15) 
Cust...... 

मैं प्रारूप फ़ाइल है कि डेटा जाना होगा में स्तंभ नाम देकर ग्रहण था देखा:

... "," 1 Cust_Name  SQL_Latin1... 
... "," 2 Cust_Ref  SQL_Latin1... 
... "," 3 Cust_Amount  SQL_Latin1... 
... "\r\n" 4 Cust_notes SQL_Latin1... 

मेरे इनपुट फ़ाइल इस तरह देखा मेज पर उचित कॉलम में।

हालांकि यह कॉलम संख्या महत्वपूर्ण है और कॉलम नाम शोर है।

... "," 1 A  SQL_Latin1... 
... "," 2 B  SQL_Latin1... 
... "," 4 C  SQL_Latin1... 
... "\r\n" 5 D  SQL_Latin1... 
संबंधित मुद्दे