복붙노트

[SQL] CSV 파일에서 SQL 문 삽입 생성

SQL

CSV 파일에서 SQL 문 삽입 생성

나는 파이어 버드에 CSV 파일을 가져와야하고 나는 몇 가지 도구를하려고 몇 시간을 보냈어요 아무도 내 요구에 맞게 없습니다.

가장 큰 문제는 내가 EMS 데이터 가져 오기 및 파이어 버드 데이터 마법사 같은 노력했습니다 모든 도구 내 CSV 파일 내 표에 필요한 모든 정보가 들어 있다는 기대 때문이다.

나는 예를 들어, 나는 도시의 이름을 가진 CSV 파일을 가지고,하지만 내 데이터베이스가 이미 다른 테이블에있는 모든 도시를 (정규화)가, 나는 삽입에 부속을 작성해야, 삽입 문에 일부 사용자 지정 SQL을 작성해야 도시에 대한 조회하고 ID를 작성하는 문, 또한 나는 cread 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)

이걸 어떻게 접근 할 수 있습니까?

해결법

  1. ==============================

    1.그것은 약간 원유 -하지만 작업 떨어져 하나, 가끔 Excel을 사용합니다.

    그것은 약간 원유 -하지만 작업 떨어져 하나, 가끔 Excel을 사용합니다.

    당신은 Excel로 CSV 파일을 가져 오는 경우 수식에서 문자열 연결을 사용하여 INSERT 문을 생성하는 수식을 만들 수 있습니다. 그래서 - CSV 파일이 Excel에서 열 A, B에 나타나지 3 열을 가지고 있으며, C, 당신은 같은 수식을 쓸 수 ...

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

    그럼 당신은 당신의 모든 행 아래 공식을 복제, 복사 및 데이터베이스에 대해 실행하는 텍스트 파일로 답을 붙여 넣을 수 있습니다.

    내가 말처럼 - 그것은 원유 -하지만이 작업이 이루어지고의 아주 '신속하고 더러운'방법이 될 수 있습니다!

  2. ==============================

    2.그것은 CSV, 그리고 그것은이 한 시간 과정이다 음, 만약, Excel에서 파일을 열고 쓰기 공식을 당신이 원하는 어떤 방법으로 데이터를 채우려면 다음 SQL을 구성하는 간단한 CONCAT 수식을 작성하고, 다음, 모든 행이 수식을 복사한다. 당신은 어디서든 당신이 원하는 실행할 수있는 SQL 문의 큰 숫자를 얻을 것이다.

    그것은 CSV, 그리고 그것은이 한 시간 과정이다 음, 만약, Excel에서 파일을 열고 쓰기 공식을 당신이 원하는 어떤 방법으로 데이터를 채우려면 다음 SQL을 구성하는 간단한 CONCAT 수식을 작성하고, 다음, 모든 행이 수식을 복사한다. 당신은 어디서든 당신이 원하는 실행할 수있는 SQL 문의 큰 숫자를 얻을 것이다.

  3. ==============================

    3.파비오,

    파비오,

    나는하기 Vaibhav 여러 번 한 무슨 짓을했는지, 그리고 그것은 좋은 데이터베이스에 데이터를 얻을 수있는 "신속하고 더러운"방법입니다.

    이 몇 번을, 또는 일정의 일부 유형을해야 할 경우, 더 신뢰할 수있는 방법 (예 customer_dataload) 작업 테이블에 "있는 그대로"는 CSV 데이터를로드 한 다음을 채우는 표준 SQL 문을 사용하는 것입니다 누락 된 필드.

    (- ...하지만 같은 나는 파이어 버드 구문을 모르는)

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

    기타

    일반적으로, 데이터베이스에 데이터를 가져온 다음 업로드 동안 데이터를 수정하려고하는 것보다 데이터를 해결하기 위해 훨씬 더 빨리 (그리고 더 신뢰할)입니다. 또한이 작업을하지 않는 경우 롤백을 허용하는 트랜잭션의 혜택을받을!

  4. ==============================

    4.당신은 한, 다음 가져온 테이블에 필요한 모든 변환을 수행하고 목표 테이블에 결과를 삽입하여 SQL 쿼리를 작성 테이블에 CSV 파일을 가져올 수 있습니다.

    당신은 한, 다음 가져온 테이블에 필요한 모든 변환을 수행하고 목표 테이블에 결과를 삽입하여 SQL 쿼리를 작성 테이블에 CSV 파일을 가져올 수 있습니다.

    뭔가 같은 :

    Excel을 사용하지만, 일부 작업은 당신이 엑셀 또는 사전에 필요한 기능을 찾기 위해 노력보다는 일을 빠른 파이썬 스크립트를 작성하는 것이 더 쉽습니다 때문에 또한, 파이썬 같은 스크립트 언어와 함께 편안하게 점점 제안에 대한 좋은 팁 작업을 수행 도구를했다.

  5. ==============================

    5.외부 테이블로 CSV 파일을 사용합니다. SQL의 모든 가능성과 함께 - 그럼 당신은 당신의 대상 테이블에 외부 테이블에서 데이터를 복사 할 SQL을 사용할 수 있습니다. http://www.firebirdsql.org/index.php?op=useful&id=netzka 참조

    외부 테이블로 CSV 파일을 사용합니다. SQL의 모든 가능성과 함께 - 그럼 당신은 당신의 대상 테이블에 외부 테이블에서 데이터를 복사 할 SQL을 사용할 수 있습니다. http://www.firebirdsql.org/index.php?op=useful&id=netzka 참조

  6. ==============================

    6.나는 AWK 함께 할 것입니다.

    나는 AWK 함께 할 것입니다.

    예를 들어, CSV 파일에이 정보가 있다면 :

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

    다음 명령은 (이 예에서는 이름 city.csv 이름) 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를 입력합니다.

  7. ==============================

    7.바로이 목적을 위해 편리 할 수있는이 VBA 스크립트를 마쳤다. 모든 문제의 테이블과 열 목록 (분명히 같은 순서가 Excel 파일에 표시)를 포함하는 삽입 문을 변경하기 만합니다.

    바로이 목적을 위해 편리 할 수있는이 VBA 스크립트를 마쳤다. 모든 문제의 테이블과 열 목록 (분명히 같은 순서가 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
    
  8. ==============================

    8.이 작업을 수행하기 위해 무료 csvsql를 사용할 수 있습니다.

    이 작업을 수행하기 위해 무료 csvsql를 사용할 수 있습니다.

  9. ==============================

    9.옵션 1: 당신이 IBExert 시도가 ​​1? IBExpert \ 도구 \ 데이터 가져 오기 (시험 또는 고객 버전).

    옵션 1: 당신이 IBExert 시도가 ​​1? IBExpert \ 도구 \ 데이터 가져 오기 (시험 또는 고객 버전).

    옵션 2 : F_BLOBLOAD와 임시 테이블에 CSV 파일을 업로드 2. 사용되는 프로 시저를 작성 3-3 함수 (f_stringlength, f_strcopy, f_MID) 당신은 당신의 INSERT INTO를 구축하기 위해 필드를 당기는 모든 문자열을 교차.

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

  10. ==============================

    10.뛰어나게 잘 작동 내가 최근 시도 도구는 FSQL입니다.

    뛰어나게 잘 작동 내가 최근 시도 도구는 FSQL입니다.

    당신은 가져 오기 명령을 쓰기 FSQL에 붙여 넣습니다 그리고 그것은 파이어 버드 테이블에 CSV 파일을 가져옵니다.

  11. ==============================

    11.당신은 쉘을 사용할 수 있습니다

    당신은 쉘을 사용할 수 있습니다

    sed "s/,/','/g" file.csv > tmp
    sed "s/$/'),(/g" tmp > tmp2
    sed "s/^./'&/g" tmp2 > insert.sql
    

    다음 추가

    INSERT INTO PERSON (ID, NAME, CITY_ID) VALUES(
    ...
    );
    
  12. from https://stackoverflow.com/questions/8213/generate-insert-sql-statements-from-a-csv-file by cc-by-sa and MIT license