2010-11-08 19 views
15

के भीतर कॉमा मेरे पास एक CSV फ़ाइल है जिसे मैं सीधे SQL सर्वर तालिका में आयात कर रहा हूं। सीएसवी फ़ाइल में प्रत्येक कॉलम को अल्पविराम से अलग किया जाता है। लेकिन मेरी समस्या यह है कि मेरे पास एक कॉलम "पता" है, और इस कॉलम के डेटा में अल्पविराम शामिल हैं। तो क्या हो रहा है कि पता कॉलम का कुछ डेटा अन्य कॉलम पर जा रहा है SQL सर्वर पर आयात करेगा।सीएसवी डेटा

मुझे क्या करना चाहिए?

+0

आप इस तरह के 'के रूप में अपने मूल्यों को अलग करने, एक और चरित्र उपयोग नहीं कर सकते;'? – romaintaz

+0

@romaintaz - यह अल्पविराम को संभालने का गलत तरीका है। अच्छा सीएसवी उद्धरण का उपयोग करता है, और उसके बाद उद्धरण से बच निकलता है। –

+0

मुझे इन तरह सीएसवी प्रदान किए गए हैं और मुझे इसका प्रबंधन करना है। – Sidharth

उत्तर

15

यदि कॉलम में कोई कॉमा है तो उस कॉलम को एक सिंगल कोट या डबल कोट से घिरा होना चाहिए। तो अगर उस स्तंभ के अंदर वहाँ एक एकल या डबल उद्धरण है यह इसके पहले एक भागने चार्टर, आम तौर पर एक \

सीएसवी

का उदाहरण प्रारूप
 
ID - address - name 
1, "Some Address, Some Street, 10452", 'David O\'Brian' 
+1

+1 यह करने का यह सही तरीका है। लेकिन "सीएसवी" इतना अनौपचारिक है कि लोग पागल सामान के सभी प्रकार करते हैं। –

+0

@gmagana - सहमत हुए, जब मैंने पहली बार इसका इस्तेमाल किया, तो मैंने रीमेबर किया, जब तक मैं 3 मुख्य चीजों को समझ नहीं पाया तब तक सिरदर्द के सभी प्रकार थे। 1) आपको एक फील्ड टर्मिनेटर की आवश्यकता होती है, आमतौर पर एक कॉमा, 2) आपको आमतौर पर एक डबल कोट द्वारा संलग्न फ़ील्ड की आवश्यकता होती है, पूर्णांक से निपटने तक सभी फ़ील्ड को डबल कोट्स में संलग्न करने के लिए सर्वश्रेष्ठ और 3) आपको एक भागने वाले कैरेक्टर की आवश्यकता होती है जब आप किसी फ़ील्ड का उपयोग करते हैं एक क्षेत्र के अंदर encloser, आमतौर पर एक \। इस तरह अपने सीएसवी को प्रारूपित करें और आप जीवन इतना आसान हो जाएगा :) – Brady

+0

मैं इसे कैसे जांच सकता हूं जब मैं सीधे SQL सर्वर पर CSV आयात कर रहा हूं। – Sidharth

1

मैं या तो सीएसवी की तुलना में किसी अन्य प्रारूप का उपयोग करने या फ़ील्ड विभाजक और/या पाठ डिलीमीटर के रूप में अन्य वर्णों का उपयोग करने का सुझाव देना चाहता हूं। अपने डेटा में उपयोग नहीं किए जाने वाले वर्ण की तलाश करने का प्रयास करें, उदा। |, #,^या @। एक ही पंक्ति का प्रारूप बन

|foo|,|bar|,|baz, qux| 

एक अच्छी तरह से व्यवहार करते हैं पार्सर दो स्तंभों के रूप में 'baz' और 'qux' की व्याख्या नहीं होना चाहिए होगा।

वैकल्पिक रूप से, आप अपना खुद का आयात वूडू लिख सकते हैं जो किसी भी समस्या को हल करता है। बाद में, आप इस Groovy skeleton उपयोगी (यकीन नहीं क्या करें कि आपके द्वारा में हालांकि धाराप्रवाह रहे हैं) Excel सहित

1

अधिकांश प्रणाली,, स्तंभ डेटा के लिए अनुमति देगा एक उद्धरण में संलग्न होने के लिए ...

मिल सकती है

col1, col2, col3 'test1', 'मेरी test2, अल्पविराम के साथ', test3

एक अन्य विकल्प जो का उपयोग करता है टैब सीमांकक के रूप में है सीएसवी, का लबादा संस्करण का उपयोग करने के लिए है।

0

मैं बोली जोड़ने help.The सकता है नहीं लगता कि होना चाहिए सबसे अच्छा तरीका मैं सुझाव देता हूं कि सामग्री में कॉमा को अन्य अंकों जैसे अंतरिक्ष या कुछ के साथ बदल दिया जाए।

replace(COLUMN,',',' ') as COLUMN 
1

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

0

दोनों पक्षों के चयन कॉलम में भाषण चिह्न जोड़ना। कॉलम एक टेक्स्ट है, तो आपको इसे एक स्ट्रिंग में बदलने के लिए कॉलम को NVARCVHAR (MAX) के रूप में भी डालना होगा।

SQLCMD -S DB-SERVER -E -Q "set nocount on; set ansi_warnings off; SELECT '""' + cast ([Column1] as nvarchar(max)) + '""' As TextHere, [Column2] As NormalColumn FROM [Database].[dbo].[Table]" /o output.tmp /s "," -W 
23

इस समस्या के लिए समाधान बहुत आसान है। पहले चुनिंदा => फ्लैट फ़ाइल स्रोत => अपनी फ़ाइल ब्राउज़ => से चूक इसकी कोई भी तरह (") यहाँ दोहरे उद्धरण लिखने से" पाठ क्वालीफायर "करने के लिए जाने के लिए और जादूगर

कदम हैं के निर्देश का पालन करें। - पहले चयन करें => फ्लैट फ़ाइल स्रोत => अपनी फ़ाइल ब्राउज़ करें => पाठ योग्यता (केवल लिखें ") और विज़ार्ड के निर्देश का पालन करें।

सौभाग्य

+5

धन्यवाद! यह सही जवाब है, और यह बहुत आसान है। –

+1

आज से पहले कभी इसमें भाग नहीं लिया। यह मेरे लिए सही जवाब है। – durbnpoisn

+1

यह भी मेरे लिए काम किया। एसएसएमएस के हिस्से पर एक बेतुका और भ्रमित डिफ़ॉल्ट क्या है! – Ben

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