2009-12-29 9 views
9

मुझे SQL Server 2000 की बीसीपी उपयोगिता का उपयोग करके कुछ डेटा निर्यात करने की आवश्यकता है। कभी-कभी मेरे डेटा में अक्षर होते हैं, जैसे कि \ t और \ n, मुझे कॉलम और पंक्ति टर्मिनेटर के रूप में उपयोग करने की आवश्यकता है। टर्मिनल के रूप में उपयोग किए जाने वाले अक्षरों से बचने के लिए मैं बीसीपी कैसे प्राप्त करूं क्योंकि यह डेटा आउटपुट करता है, ताकि मैं वास्तव में किसी अन्य प्रोग्राम में डेटा आयात कर सकूं?टर्मिनर से बचने के लिए bcp.exe प्राप्त करना

उदाहरण के लिए, मेरे कॉलम में से एक टेक्स्ट डेटा है, और इसमें टैब और न्यूलाइन शामिल हैं। बीसीपी सिर्फ उन्हें निर्यात करता है, और जिस प्रोग्राम को मैं उन्हें आयात करने की कोशिश कर रहा हूं, वह भ्रमित हो जाता है क्योंकि डेटा एक पंक्ति के बीच में समाप्त होता है और/या किसी रेखा में कोई स्पष्ट कारण नहीं है।

इस तरह लगता है एक बहुत, बहुत, बहुत मूल कार्य एक डेटा निर्यातक में शामिल करने के लिए है, लेकिन the command-line options में से कोई भी यह उल्लेख करने के लिए लग रहे हैं। (यह सिर्फ मेरे बाहर डिफ़ॉल्ट क्यों नहीं होगा।) क्या मुझे कुछ याद आ रहा है?

उत्तर

-6

आपके पास टैब और न्यूलाइन सेपरेटर्स वाले टैब और न्यूलाइन वाले डेटा नहीं हो सकते हैं। इसका कोई मतलब नही बनता। भागने से मदद नहीं मिलेगी, क्योंकि एक टैब एक टैब है। हम यहाँ सी # स्ट्रिंग हैंडलिंग बात नहीं कर रहे हैं।

मुझे क्या करना चाहते हैं क्या different terminators जैसे | और ||/n, का उपयोग करें या एक format file

+1

यह वास्तव में समझ में आता है - उदाहरण के लिए, PostgreSQL में कॉपी का उपयोग करके, यह अनुक्रम \ n' को टेक्स्ट कॉलम में वास्तविक वास्तविकता में बदल देगा। और दुर्भाग्य से मैं PostgreSQL में एक पंक्ति डिलीमीटर निर्दिष्ट नहीं कर सकता। – Kev

+0

इसके अलावा, हालांकि अलग-अलग टर्मिनेटर एक वर्कअराउंड है, फिर भी यह पोस्ट-क्वेरी प्रतिस्थापन करने के लिए * वास्तव में * लंबा समय ले रहा है। यदि बीसीपी बस टेक्स्ट कॉलम से ठीक से बच सकता है तो यह बेहतर होगा। – Kev

+0

न तो osql और न ही sqlcmd इसका समर्थन करता है। क्या होगा यदि आपके पास बचने वाले चरित्र में एक फ़ील्ड समाप्त हो, उदाहरण के लिए? और यदि आप PostgreSQL जानकारी पढ़ते हैं, तो यह डोडी से बचने के बारे में बताता है ... एसक्यूएल सर्वर पूरी तरह अनुमानित है, नहीं? – gbn

-1

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

संभव समाधान: http://groups.google.co.uk/group/microsoft.public.sqlserver.tools/tree/browse_frm/thread/f1ee12cba3079189/ef9094123901fe26?rnum=1&q=lindawie+format+file&_done=%2Fgroup%2Fmicrosoft.public.sqlserver.tools%2Fbrowse_frm%2Fthread%2Ff1ee12cba3079189%2Fef9094123901fe26%3Ftvc%3D1%26q%3Dlindawie%2Bformat%2Bfile%26#doc_fa5708ca51d967a6

स्वरूप फ़ाइल विवरण & डिजाइन: http://groups.google.co.uk/groups?q=lindawie+format+file

सादर

: http://msdn.microsoft.com/en-us/library/aa173859%28SQL.80%29.aspx

आम तौर पर मैं आप बीसीपी समस्याओं और समाधान के बारे में पता पाने के लिए इन लिंक का सुझाव कर सकते हैं

+0

लिंक टूट गए हैं और समाधान के विवरण उत्तर में वर्णित नहीं हैं – wrschneider

5

पूरी तरह से आपसे सहमत हैं: भागना एक विकल्प होना चाहिए। "आपके पास टैब या न्यूलाइन के साथ डेटा नहीं हो सकता है" मैंने कभी सुना है सबसे अच्छी चीज है।

  1. -r विकल्प का उपयोग एक अलग लाइन टर्मिनेटर स्थापित करने के लिए:

    यहाँ एक संभव समाधान है। कुछ
    आपके डेटा में मौजूद होने की संभावना नहीं है (#! # $ #% #)। मुझे लगता है कि आप एकाधिक
    वर्णों का उपयोग कर सकते हैं, जिससे यह आसान हो जाता है।

  2. अपनी डेटा फ़ाइल को sed, एक सक्षम टेक्स्ट एडिटर में खोलें, या एक स्क्रिप्ट लिखें - और अपने बचने वाले समकक्षों (\\ n और \\ t) के साथ किसी भी \ n और \ t वर्ण को प्रतिस्थापित करें। अंत में अपने लाइन टर्मिनेटर को \ n के साथ बदलें और आपको अच्छा होना चाहिए।
  3. मुझे लगता है कि एक ही बात क्षेत्र टर्मिनेटर्स के लिए आयकर का उपयोग कर

this article for more information पर एक नजर डालें करने के लिए आवेदन करना चाहिए।

1

आप कई पात्रों से बना एक विभाजक उपयोग कर सकते हैं यदि आप उन्हें दोहरे उद्धरण चिह्नों के बीच डाल दिया:

bcp MY_TABLE out C:\MY_FILE.txt -S SERVER_IP -d DB_NAME -U MY_USER -P MY_PASSWORD -w -t "&#)^@" -r ">~+!"

समाधान here मिले।

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