2011-09-12 10 views
36

मैंने एक SQL सर्वर स्थापना से उपयोगकर्ता इनपुट डेटा के बड़े टेक्स्ट फ़ील्ड वाले 75,000 पंक्ति तालिका को निर्यात करने में 2 दिन बिताए हैं। इस डेटा में प्रत्येक सादा एसीसी चरित्र, टैब और न्यूलाइन शामिल हैं। मुझे सीएसवी निर्यात करने की आवश्यकता है जहां हर क्षेत्र को उद्धृत किया गया है, और उद्धृत कॉलम के भीतर उद्धरण ठीक से बच गए हैं ("")।SQL सर्वर एक्सप्रेस से CSV (डेटा उद्धरण और भागने की आवश्यकता है) से डेटा निर्यात करना

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

मुझे FasterCSV रूबी लाइब्रेरी के साथ आयात करने की आवश्यकता है। यह उद्धरण डिलीमीटर को एक गैर-मानक एसीआईआई चरित्र या एक से अधिक वर्ण होने की अनुमति नहीं देता है। यह \ n या \ r unquoted कॉलम में भी अनुमति नहीं देता है।

किसी भी मदद की बहुत सराहना की है।

+1

तुम सिर्फ माणिक कार्यक्रम से एसक्यूएल सर्वर से कनेक्ट कर सकते हैं और निर्यात को छोड़/आयात कदम? आप चुनने के लिए रूबी-डीबीआई पैकेज का उपयोग कर सकते हैं * और बस इसे उद्धृत करें, हालांकि आप चाहते हैं। – Doon

+0

@ डून जो देखने लायक हो सकता है। यदि मैं रूबी के साथ कनेक्ट और परिणाम प्राप्त कर सकता हूं तो मैं वैध सीएसवी निर्यात करने के लिए FasterCSV का उपयोग करने में सक्षम हो सकता हूं। मैं बाहरी क्लाइंट से कनेक्ट नहीं कर सकता क्योंकि मैं सख्त अनुमतियों वाले मशीन पर काम कर रहा हूं जो SQL सर्वर से रिमोट कनेक्शन की अनुमति नहीं देता है। –

+0

यदि आप SQL Server 2012 का उपयोग कर रहे हैं तो आप इस समस्या का सामना कर रहे हैं https://connect.microsoft.com/SQLServer/feedback/details/735714 – andrej351

उत्तर

1

शायद नीचे दिया गया लिंक आपकी मदद कर सकता है:

Import/Export data with SQL Server 2005 Express

+3

दुर्भाग्य से यह मदद नहीं करता है। SQL सर्वर एक्सप्रेस के साथ आने वाले सभी टूल अमान्य CSV बनाते हैं। –

25

मैं इसे भी समझने की कोशिश कर रहा हूं। सुनिश्चित नहीं हैं कि अगर यह आप के लिए काम करेंगे के बाद से अपनी मेज मेरा की तुलना में बहुत बड़ा है, लेकिन यह है कि क्या मैं सिर्फ एक लहर से बाहर किया है:

  1. मैं एक SELECT * बयान
  2. करके एक्सप्रेस में मेरी मेज खिंचाई सीधे शब्दों में जिसके परिणामस्वरूप पंक्तियों और Ctrl चयनित + सी
  3. , एक्सेल
  4. खोला स्तंभों की राशि तालिका मैं चिपकाने
  5. चिपकाया गया था हाइलाइट किया गया है और यह 'friggin wor ked!
  6. अब एक्सेल को CSV के रूप में निर्यात करना है और किया गया है।

मुझे पता है कि यह शायद बेवकूफ लगता है, लेकिन यह वास्तव में मेरे लिए काम करता है।

+5

यह उत्तर वास्तव में ऊपर उठाया जाना चाहिए। मैं ओपी से ज्यादा चौंक गया हूं कि यह वास्तव में काम करता है। मैंने इसे दूरस्थ डेस्कटॉप पर 170 के पंक्तियों की एक तालिका के लिए किया था क्योंकि उत्पादन सर्वर में एक्सेल या कुछ और स्थापित नहीं था। तो मैं अतिथि आरडीपी सिस्टम के अंदर गया, एसक्यूएल चला गया, पंक्तियों की प्रतिलिपि बनाई, और फिर आरडीपी सत्र चलाने वाले मेजबान सिस्टम पर वापस चला गया और ओपनऑफिस में चिपकाया। आरडीपी पर क्लिपबोर्ड डेटा स्ट्रीम करने में लगभग ~ 10 मिनट लग गए और बाद में इसे फिर से निकालने के लिए ओपनऑफिस को थोड़ा सा खींचना पड़ा, लेकिन यह काम करता था और डेटा से बच निकला था। दुखद लेकिन सच। –

+14

मैं यह जोड़ना चाहता हूं कि मुझे उम्मीद है कि माइक्रोसॉफ्ट इंजीनियरों को दैनिक आधार पर चेहरे पर लात मार दिया जाएगा। –

+3

यह एक शर्म की बात है कि इसे उत्तर के रूप में चिह्नित नहीं किया गया क्योंकि यह बिल्कुल काम करता है। मेरे मामले में एसएसएमएस से निर्यात न्यूलाइन के साथ तारों से ठीक से बच नहीं रहा था। एक्सेल में कॉपी/पेस्ट करना और फिर निर्यात करना जवाब था क्योंकि यह सीएसवी को बेहतर तरीके से संभालता है। –

2

यहां केवल यह करने के लिए एक स्क्रिप्ट का उपयोग मैं का सार है:

require 'rubygems' 
require 'active_record' 
require 'tiny_tds' 
require 'activerecord-sqlserver-adapter' 
require 'acts_as_reportable' 
require 'ruport' 

ActiveRecord::Base.logger = Logger.new("log/debug.log") 
ActiveRecord::Base.establish_connection(
    :adapter => 'sqlserver', 
    :mode  => 'dblib', 
    :dataserver => 'servername', 
    :username => 'username', 
    :password => 'password', 
    :timeout => '60000' 
) 

class Table1 < ActiveRecord::Base 
    set_table_name 'table_name' 
    set_primary_key 'table_id' 
    acts_as_reportable 
end 

Table1.report_table(:all).save_as("finished/table1.csv") 

आशा है कि यह मदद करता है!

41

यह किया जा सकता है! हालांकि आपको विशेष रूप से उद्धृत आउटपुट का उपयोग करने के लिए एसएसएमएस को कॉन्फ़िगर करना है, क्योंकि कुछ डाफ्ट कारणों से यह डिफ़ॉल्ट नहीं है। > क्वेरी विकल्प ...

बॉक्स "उद्धरण सूची विभाजक युक्त जब .csv परिणाम बचत तार" जाँच करें -

क्वेरी खिड़की आप सहेजना चाहते में क्वेरी में जाते हैं।

enabling quoted csv output

तो

select 'apple,banana,cookie' as col1,1324 as col2,'one two three' as col3,'a,b,"c",d' as col4 

इच्छा उत्पादन

col1,col2,col3,col4 
"apple,banana,cookie",1324,one two three,"a,b,""c"",d" 

जो है हम सब क्या चाहते हैं।

+0

यदि आपके डेटा में उद्धरण के साथ फ़ील्ड हैं लेकिन कोई कॉमा नहीं है, तो http://stackoverflow.com/questions/14573623/whats-a-semantically-correct-way-to-parse-csv-from-sql-server-2008/14575076 है एक रूबी विधि जो काम करेगी (FasterCSV नहीं होगी) –

+5

ध्यान दें कि यह समाधान किसी विशेष क्वेरी के लिए है। आप उपकरण> विकल्प> क्वेरी परिणाम> SQL सर्वर> ग्रिड के परिणाम> सभी को पूछताछ करते समय सूची विभाजक युक्त उद्धरण तारों को डिफ़ॉल्ट रूप से सेट कर सकते हैं .csv परिणाम –

+10

यह न्यूलाइन वाले टेक्स्ट फ़ील्ड के लिए काम नहीं करता है। – jrothenbuhler

1

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

पैकेज बनाने के लिए देव वातावरण रखने के लिए विजुअल स्टूडियो के लिए इस ऐड ऑन की आवश्यकता हो सकती है: http://www.microsoft.com/en-us/download/details.aspx?id=42313 (लिंक वीएस 2013 के लिए है, अन्य लिंक वीएस के अन्य संस्करणों के लिए उपलब्ध हैं)।

+0

यह सबसे अच्छा सोल है ution, लेकिन जब आप एक्सेल में त्वरित और गंदे एक-एक प्रतिलिपि चाहते हैं तो यह इतना प्रयास करता है। यह मुश्किल नहीं होना चाहिए! – aucuparia

7

यह करने के लिए सबसे आसान तरीका है:

Excel का उपयोग करें डेटा आयात के उपकरण

  • डाटा को अन्य स्रोतों से जाएं>> Sql सर्वर से
  • सर्वर का नाम आदि में भरें
  • तालिका का चयन करें या देखें कि आप आयात करना चाहते हैं।

फिर आयातित डेटा को एक CSV फ़ाइल में सहेजें। यदि आप कोई क्वेरी निर्यात करना चाहते हैं तो अपनी क्वेरी को

+0

यह मूल समस्या का समाधान है। यह स्थानीय रूप से मेरे लिए काम करता है, लेकिन मेरे पास एक डेटाबेस है जो सुरक्षा प्रतिबंधों के कारण मैं एक्सेल से कनेक्ट नहीं कर सकता। :-( – Ads

+2

मेरे पास उद्धरण, न्यूलाइन, अजीब पात्रों आदि के साथ डेटा का एक समूह था। यह वह उत्तर है जो काम करता है। धन्यवाद। (लेकिन यह ध्यान दिया जाना चाहिए कि मुझे अपने कॉलम को एक नएटेबल में चुनना था ताकि एक्सेल देख सके परिणाम सेट के बजाए तालिका) –

+0

हां, कुछ एसक्यूएल चलाने और विज्ञापन रिपोर्ट करने के बजाए इसे देखें और निर्यात करें। यह सबसे अच्छा अभ्यास है जो मुझे लगता है। – Dave

0

रॉबर्ट कैलहून का समाधान मेरे लिए काम नहीं करता है। हमारे पास अल्पविराम और कैरिज रिटर्न/न्यूलाइन इत्यादि के साथ बहुत सी पाठ थी। हमने क्रिस क्रिस्टोडाउलो के समाधान में कुछ बदलावों के साथ निर्यात कार्यक्षमता का उपयोग किया।

एसक्यूएल प्रबंधन स्टूडियो में, डेटाबेस पर राइट क्लिक करें और कार्य -> ​​निर्यात डेटा का चयन करें।

फिर SQL सर्वर को स्रोत के रूप में स्रोत और फ़्लैट फ़ाइल के रूप में चुनें। फ़ाइल MyFile.csv नाम दें।

के रूप में "

चुनें पाठ क्वालीफायर तय करें 'एक प्रश्न लिखें डेटा अंतरण निर्दिष्ट करने के लिए' और अपने प्रश्न में पेस्ट करें। आप चूक के रूप में अगले सेटिंग छोड़ सकते हैं।

डेटा निर्यात के साथ

, एक्सेल के साथ खुला और एक्सेल प्रारूप में सहेजें।

+0

डी ओह .. !!!! तो बंद करें .. पूर्वावलोकन ने निर्दोष रूप से काम किया लेकिन वास्तविक निर्यात के दौरान मुझे यह त्रुटि मिली: त्रुटि 0xc020802e: डेटा फ़्लो कार्य 1: "गंतव्य - testttttt_csv.Inputs [फ्लैट फ़ाइल गंतव्य इनपुट] के लिए डेटा प्रकार। कॉलम [मुख्य_Content]" DT_NTEXT है, जो नहीं है एएनएसआई फाइलों के साथ समर्थित है। इसके बजाय DT_TEXT का उपयोग करें और डेटा रूपांतरण घटक का उपयोग कर डेटा को DT_NTEXT में कनवर्ट करें। (SQL सर्वर आयात और निर्यात विज़ार्ड) – Ads

0

सबसे अच्छा समाधान मैं के साथ आ सकता है सभी पंक्तियों को चुनें और एक्सएमएल के रूप में एक प्रतिलिपि करना है।

पेस्ट यह एक नोटपैड फ़ाइल में और बचाने के यह एक एक्सएमएल फ़ाइल के रूप में। फिर एक्सएमएल फ़ाइल एक्सेल और वॉयला से खोलें! कम से कम कि मुझे अपनी फाइल कैसे मिली।

0

सबसे सरल समाधान Ive आपके क्वेरी में डबल कोट्स जोड़ना है;

SELECT '"'+MYCHARACTERDATA+'"' FROM MYTABLE 

यदि आपकी स्प्रेडशीट आपको एक कस्टम टेक्स्ट क्वालीफायर का उपयोग करने की अनुमति देती है तो आप एक और विदेशी चरित्र जैसे उपयोग कर सकते हैं। पाठ में डबल उद्धरण से बचने के लिए।

डाफ्ट..एसएसएमएस को उद्धृत टेक्स्ट फ़ील्ड के साथ उचित सीएसवी के रूप में निर्यात करना चाहिए और उन क्षेत्रों में ठीक से बच निकले उद्धरण।

0

हम एक छोटे से स्क्रिप्ट SSMS कन्वर्ट करने के लिए "टूट" सीएसवी उचित सीएसवी में बनाया, इस जवाब में पा:

https://stackoverflow.com/a/46876236/1532201

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