एक सीएसवी फ़ाइल से SQL कथन डालें जेनरेट करें

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

मुख्य समस्या यह है कि मैं जिस उपकरण को ईएमएस डेटा आयात और < a href = "http://www.sqlmaestro.com/products/firebird/datawizard/help/06_01_05_csv/" rel = "noreferrer"> फ़ायरबर्ड डेटा विज़ार्ड उम्मीद करता है कि मेरी csv फ़ाइल मेरी तालिका द्वारा आवश्यक सभी जानकारी शामिल है।

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

मेरा सम्मिलन कथन कुछ ऐसा होगा:

INSERT INTO PERSON (ID, NAME, CITY_ID) VALUES((SELECT NEW_GUID FROM CREATE_GUID), :NAME, (SELECT CITY_ID FROM CITY WHERE NAME = :CITY_NAME)

मुझे पता है कि ऐसा करने के लिए एक आवेदन लिखना बहुत आसान है, लेकिन मैं पहिया को फिर से शुरू नहीं करना चाहता, और मुझे यकीन है कि ऐसा करने के लिए वहां कुछ टूल्स हैं।

क्या आप लोग मुझे कुछ सलाह दे सकते हैं?

0
ro fr bn

14 उत्तर

मैं कभी-कभी विश्व का सरल कोड जनरेटर (जावास्क्रिप्ट संस्करण) का उपयोग करता हूं। यह ऑनलाइन है, लेकिन यह सिर्फ जावास्क्रिप्ट है - आपका डेटा कहीं भी नहीं जाता है। हालांकि, अधिक सुविधाओं के साथ एक एएसपी संस्करण भी है।

0
जोड़ा
सम्मिलित करें उत्पन्न करने के लिए उन उपकरणों में नियमित अभिव्यक्ति कैसे होती है?
जोड़ा लेखक Kiquenet, स्रोत
मैंने उसमें एक भिन्नता का उपयोग किया (अनिवार्य रूप से थोड़ा सा डेटा मैसेजिंग करने के लिए थोड़ा सा कस्टम कोड जोड़ा जो मेरे मामले की आवश्यकता थी) और एक टेम्पलेटिंग समाधान के साथ आया जो मुझे सचमुच घंटों बचाता है जब मुझे टेबल को फिर से पॉप्युलेट करना होता है I मैं काम कर रहा हूं .. एक्सेल, बीटीडब्ल्यू से डेटा प्राप्त करना।
जोड़ा लेखक schonarth, स्रोत

यह थोड़ा कच्चा है - लेकिन नौकरियों में से एक के लिए, मैं कभी-कभी एक्सेल का उपयोग करता हूं।

यदि आप Excel में CSV फ़ाइल आयात करते हैं, तो आप सूत्र बना सकते हैं जो सूत्र में स्ट्रिंग concatenation का उपयोग कर एक INSERT कथन बनाता है। तो - यदि आपकी सीएसवी फ़ाइल में 3 कॉलम हैं जो एक्सेल में कॉलम ए, बी और सी में दिखाई देते हैं, तो आप एक फॉर्मूला लिख ​​सकते हैं ...

="INSERT INTO MyTable (Col1, Col2, Col3) VALUES (" & A1 & ", " & B1 & ", " & C1 & ")"

फिर आप अपनी सभी पंक्तियों के सूत्र को दोहरा सकते हैं, और उत्तर को अपने डेटाबेस के विरुद्ध चलाने के लिए एक टेक्स्ट फ़ाइल में कॉपी और पेस्ट कर सकते हैं।

जैसे मैं कहता हूं - यह कच्चा है - लेकिन यह काम पूरा करने का एक 'त्वरित और गंदा' तरीका हो सकता है!

0
जोड़ा
यह एक्सेल तकनीक की तुलना में इतना बेहतर है कि मैं उपयोग कर रहा था! धन्यवाद!
जोड़ा लेखक Liam, स्रोत
आप फ़ाइल को एक सभ्य संपादक (उदा। Vim) के साथ भी खोल सकते हैं और प्रत्येक पंक्ति पर एक त्वरित मैक्रो लागू कर सकते हैं।
जोड़ा लेखक Luc M, स्रोत

खैर, अगर यह एक सीएसवी है, और यह एक बार की प्रक्रिया है, तो Excel में फ़ाइल खोलें, और उसके बाद अपने डेटा को किसी भी तरह से पॉप्युलेट करने के लिए सूत्र लिखें, और फिर अपने SQL को बनाने के लिए एक सरल Concat सूत्र लिखें, और फिर प्रत्येक पंक्ति के लिए उस सूत्र की प्रतिलिपि बनाएँ। आपको बड़ी संख्या में SQL कथन मिलेगा जिन्हें आप कहीं भी निष्पादित कर सकते हैं।

0
जोड़ा

फैबियो,

मैंने वैभव ने कई बार किया है, और डेटाबेस में डेटा प्राप्त करने के लिए यह एक अच्छा "त्वरित और गंदा" तरीका है।

यदि आपको इसे कुछ बार, या किसी प्रकार के शेड्यूल पर करने की आवश्यकता है, तो एक अधिक विश्वसनीय तरीका सीएसवी डेटा "as-is" को एक कार्य तालिका (यानी customer_dataload) में लोड करना है और उसके बाद मानक SQL कथन का उपयोग करना है गायब फ़ील्ड

(मुझे फायरबर्ड सिंटैक्स नहीं पता - लेकिन कुछ ऐसा है ...)

UPDATE person
SET id = (SELECT newguid() FROM createguid)

UPDATE person
SET cityid = (SELECT cityid FROM cities WHERE person.cityname = cities.cityname)

आदि।

आमतौर पर, डेटाबेस में डेटा प्राप्त करने के लिए यह बहुत तेज (और अधिक विश्वसनीय) है और फिर अपलोड के दौरान डेटा को ठीक करने का प्रयास करने के बजाय डेटा को ठीक करें। यदि आप काम नहीं करते हैं तो आपको रोलबैक की अनुमति देने के लिए लेनदेन का लाभ भी मिलता है !!

0
जोड़ा

ऐसा करने के लिए आप मुफ्त csvsql का उपयोग कर सकते हैं।

  • Install it using these instructions
  • Now run a command like so to import your data into your database. More details at the links above, but it'd be something like:

    csvsql --db firebase:///d=mydb --insert mydata.csv

  • The following works with sqlite, and is what I use to convert data into an easy to query format

    csvsql --db sqlite:///dump.db --insert mydata.csv

0
जोड़ा

Very Simple online Utility : Convert from/to CSV

0
जोड़ा
बढ़िया, दशमलव प्रकारों के बारे में कुछ मुद्दे।
जोड़ा लेखक Kiquenet, स्रोत
एक बेहतर कन्वर्ट टूल: codebeautify.org/csv-to-sql-converter
जोड़ा लेखक ahgood, स्रोत

आप CSV फ़ाइल को किसी तालिका में आयात कर सकते हैं, फिर एक SQL क्वेरी लिखें जो आयातित तालिका पर सभी आवश्यक परिवर्तन करता है और परिणाम को लक्ष्य तालिका में सम्मिलित करता है।

तो कुछ ऐसा है:

<(load the CSV file into temp_table - n, city_name)>

insert into target_table

select t.n, c.city_id as city

from temp_table t, cities c

where t.city_name = c.city_name

एक्सेल का उपयोग करने के बारे में अच्छी युक्ति है, लेकिन मैं पाइथन जैसे स्क्रिप्टिंग भाषा के साथ सहज महसूस करने का भी सुझाव देता हूं, क्योंकि कुछ कार्य के लिए एक्सेल में आवश्यक फ़ंक्शन को ढूंढने की कोशिश करने से पहले नौकरी करने के लिए एक त्वरित पायथन लिपि लिखना आसान होता है या पूर्व- बनाया गया उपकरण जो नौकरी करता है।

0
जोड़ा

मैं इसे awk के साथ करूँगा।

उदाहरण के लिए, यदि आपके पास यह जानकारी CSV फ़ाइल में थी:

Bob,New York
Jane,San Francisco
Steven,Boston
Marie,Los Angeles

निम्न आदेश आपको जो भी चाहिए, वह आपको देगा जो आपकी सीएसवी फ़ाइल (इस कोड में name-city.csv नाम दिया गया है) के समान निर्देशिका में चलाएं।

$ awk -F, '{ print "INSERT INTO PERSON (ID, NAME, CITY_ID) VALUES ((SELECT NEW_GUID FROM CREATE_GUID), '\''"$1"'\'', (SELECT CITY_ID FROM CITY WHERE NAME = '\''"$2"'\''))" }' name-city.csv

अधिक जानकारी के लिए awk --help टाइप करें।

0
जोड़ा
यह अविश्वसनीय रूप से अनुपयोगी है। आपके समय के कुछ सेकंड एक त्वरित और गंदे उदाहरण बनाने में बिताए गए किसी ऐसे व्यक्ति को बचाएंगे जो बहुत से घंटों का उपयोग नहीं करता है।
जोड़ा लेखक Anthony, स्रोत

आप fbcopy और fbexport उपकरण।

0
जोड़ा
क्या यह उत्तर प्रश्न से संबंधित है? लिंक कहता है fbcopy : फायरबर्ड डेटाबेस में डेटा की प्रतिलिपि बनाने और तुलना करने के लिए टूल
जोड़ा लेखक hdoghmen, स्रोत

मैं गुब्बारे के एक्सेल तकनीक पर थोड़ी भिन्नता का उपयोग करता हूं।

I highly recommend downloading the free ASAP Utilities plug-in for Excel. One of the many time saving tools they include are insert before current value and insert after current value options.

आपको अपने सम्मिलित बयान बनाने में मदद करके आपको एक समाधान तक पहुंचने देना चाहिए।

0
जोड़ा

एक टूल मैंने हाल ही में कोशिश की है कि यह काफी अच्छी तरह से काम करता है FSQL है।

आप एक आयात कमांड लिखते हैं, इसे FSQL में पेस्ट करें और यह CSV फ़ाइल को फ़ायरबर्ड तालिका में आयात करता है।

0
जोड़ा

इस वीबीए स्क्रिप्ट को अभी समाप्त कर दिया है जो इस उद्देश्य के लिए आसान हो सकता है। सभी को करने की आवश्यकता है प्रश्न में तालिका और स्तंभों की सूची (स्पष्ट रूप से उसी अनुक्रम में वे Excel फ़ाइल पर दिखाई देने के लिए) सम्मिलित कथन को बदलना चाहिए।

Function CreateInsertStatement()
    'Output file location and start of the insert statement
    SQLScript = "C:\Inserts.sql"
    cStart = "Insert Into Holidays (HOLIDAY_ID, NAT_HOLDAY_DESC, NAT_HOLDAY_DTE) Values ("

    'Open file for output
    Open SQLScript For Output As #1

    Dim LoopThruRows As Boolean
    Dim LoopThruCols As Boolean


    nCommit = 1 'Commit Count
    nCommitCount = 100 'The number of rows after which a commit is performed

    LoopThruRows = True
    nRow = 1 'Current row

    While LoopThruRows

        nRow = nRow + 1 'Start at second row - presuming there are headers
        nCol = 1 'Reset the columns
        If Cells(nRow, nCol).Value = Empty Then
            Print #1, "Commit;"
            LoopThruRows = False
        Else
            If nCommit = nCommitCount Then
                Print #1, "Commit;"
                nCommit = 1
            Else
                nCommit = nCommit + 1
            End If

            cLine = cStart
            LoopThruCols = True

            While LoopThruCols
                If Cells(nRow, nCol).Value = Empty Then
                    cLine = cLine & ");"                    'Close the SQL statement
                    Print #1, cLine                         'Write the line
                    LoopThruCols = False                    'Exit the cols loop
                Else
                    If nCol > 1 Then                        'add a preceeding comma for all bar the first column
                        cLine = cLine & ", "
                    End If
                    If Right(Left(Cells(nRow, nCol).Value, 3), 1) = "/" Then 'Format for dates
                        cLine = cLine & "TO_DATE('" & Cells(nRow, nCol).Value & "', 'dd/mm/yyyy')"
                    ElseIf IsNumeric(Left(Cells(nRow, nCol).Value, 1)) Then 'Format for numbers
                        cLine = cLine & Cells(nRow, nCol).Value
                    Else 'Format for text, including apostrophes
                        cLine = cLine & "'" & Replace(Cells(nRow, nCol).Value, "'", "''") & "'"
                    End If

                    nCol = nCol + 1
                End If
            Wend
        End If
    Wend

    Close #1

End Function
0
जोड़ा

विकल्प 1: 1- क्या आपने आईबीईएक्सर्ट की कोशिश की है? IBExpert \ Tools \ आयात डेटा (परीक्षण या ग्राहक संस्करण)।

विकल्प 2: 2- अपनी सीएसवी फ़ाइल को F_BLOBLOAD के साथ एक अस्थायी तालिका में अपलोड करें। 3- एक संग्रहित प्रक्रिया बनाएं, जो 3 कार्यों का उपयोग करती है (f_stringlength, f_strcopy, f_MID) आप अपनी सभी स्ट्रिंग को पार करते हैं, अपने फ़ील्ड को अपने इंसर्ट में बनाने के लिए खींचते हैं।

links: 2: http://freeadhocudf.org/documentation_english/dok_eng_file.html 3: http://freeadhocudf.org/documentation_english/dok_eng_string.html

0
जोड़ा

use the csv-file as an external table. Then you can use SQL to copy the data from the external table to your destination table - with all the possibilities of SQL. See http://www.firebirdsql.org/index.php?op=useful&id=netzka

0
जोड़ा
बाहरी तालिकाओं का उल्लेख करने के लिए +1, लेकिन ध्यान दें कि आपको अपने डेटा को निश्चित-लंबाई रिकॉर्ड और फ़ील्ड में CHAR (n) के रूप में रखना होगा, और आपको GRANT विशेषाधिकार की आवश्यकता है , और आपको firebird.conf में ExternalFileAccess = Full और DatabaseAccess = Full का उपयोग करके फ़ाइल पहुंच की अनुमति देने की आवश्यकता है।
जोड़ा लेखक Lumi, स्रोत