복붙노트

[SQL] CSV에서 SQL 대량 가져 오기

SQL

CSV에서 SQL 대량 가져 오기

나는 SQL 서버에 큰 CSV 파일을 가져와야합니다. 나는 이것을 사용하고 있습니다 :

BULK 
INSERT CSVTest
        FROM 'c:\csvfile.txt'
            WITH
    (
                FIELDTERMINATOR = ',',
                ROWTERMINATOR = '\n'
    )
GO

문제는 내 모든 필드는 따옴표 ( "") 행이 실제로처럼 보이는 있도록 둘러싸여 있습니다 :

"1","","2","","sometimes with comma , inside", "" 

나는 어떻게 든 대량 가져 오기 그들과는 필드 구분 기호로 따옴표를 사용하는 SQL을 말할 수 있습니까?

편집 : 사용의 문제 ' ","'구분 기호로, 제안 된 예에서와 같이 그입니다 : 대부분의 예는 어떤 기능을 수행, 그들은 그 때 가서 그 밖으로 스트립, "첫 번째 열에서 마지막"처음 마지막에 포함하여 데이터를 가져올 수 있습니다. 내 첫 번째 (마지막) 열 아아 날짜를하고는 "20080902이 날짜로 가져올 수 없습니다.

봤는데 어떤에서 독서는 내가 FORMATFILE가 갈 수있는 방법이라고 생각하지만, (MSDN 포함) 문서는 몹시 unhelpfull입니다 arround를.

해결법

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

    1.나는 이것이 진정한 해결책이 아니다 알고 있지만 나는 모두를위한 NVARCHAR 세트를 가져 오기 위해 더미 테이블을 사용합니다. 그럼 그것은 꽤하지 않습니다.은 "문자를 제거합니다 및 변환을 수행 삽입을하지만 일을한다.

    나는 이것이 진정한 해결책이 아니다 알고 있지만 나는 모두를위한 NVARCHAR 세트를 가져 오기 위해 더미 테이블을 사용합니다. 그럼 그것은 꽤하지 않습니다.은 "문자를 제거합니다 및 변환을 수행 삽입을하지만 일을한다.

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

    2.시도 FIELDTERMINATOR = ' ","'

    시도 FIELDTERMINATOR = ' ","'

    다음은 첫 번째와 마지막 인용 도움에 큰 링크입니다 ... 그는이 SP 하위 문자열 사용보기 방법

    http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file

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

    3.가끔 사용하는 또 다른 해킹, 다음, Excel에서 CSV를 열고 각 행의 마지막 셀에 당신의 SQL 문을 작성하는 것입니다. 예를 들면 :

    가끔 사용하는 또 다른 해킹, 다음, Excel에서 CSV를 열고 각 행의 마지막 셀에 당신의 SQL 문을 작성하는 것입니다. 예를 들면 :

    =concatenate("insert into myTable (columnA,columnB) values ('",a1,"','",b1,"'")")
    

    채우기 다운 당신을 위해 모든 행이 점을 채울 수 있습니다. 그럼 그냥 복사하여 새 쿼리 창에 출력을 붙여 넣습니다.

    그것은 구식,하지만 당신은 단지 당신이 그것을 할 수있는 '적절한'방법에있는 모든 모호한 문서를 읽는 장난 저장하는 동안 번 수입을해야합니다.

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

    4.OPENROWSET을보십시오. 이것은 엑셀 물건을 가져올 수 있습니다. 당신은 단지 올바른 [ConnectionString을] 알아 내야 있도록 엑셀, [2] CSV 파일을 열 수 있습니다.

    OPENROWSET을보십시오. 이것은 엑셀 물건을 가져올 수 있습니다. 당신은 단지 올바른 [ConnectionString을] 알아 내야 있도록 엑셀, [2] CSV 파일을 열 수 있습니다.

    [2] : 드라이버 = {Microsoft 텍스트 드라이버 (* .txt; * .csv)로}; DBQ = C : \ txtFilesFolder \; 확장 = 오름차순, CSV, 탭, TXT;

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

    5.아이디 말 사용 FileHelpers의 오픈 소스 라이브러리를

    아이디 말 사용 FileHelpers의 오픈 소스 라이브러리를

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

    6.수행 프로그래밍 방식으로이 작업을 수행 할 필요가, 또는 한 번 샷?

    수행 프로그래밍 방식으로이 작업을 수행 할 필요가, 또는 한 번 샷?

    엔터프라이즈 관리자를 사용하여 데이터 가져 오기는 당신이 당신의 구분 기호를 선택할 수 있습니다 마우스 오른쪽 단추로 클릭합니다.

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

    7.당신은 BSP 또는 대량 삽입도는 인용이 (심지어 XML 형식 파일이 옵션을 제공하지 않습니다)도 형식의 파일로, 일치하지 않는 더미 [ "] 상기 문자 잘 경우이를 처리하기 때문에 BCP / 대량 삽입에 조심해야 시작과 끝과 구분자로 [ ","]를 사용하여. [,] 문자가 포함 된 어떠한 경우 기술적으로 CSV 파일 [ "] 문자가 필요하지 않습니다

    당신은 BSP 또는 대량 삽입도는 인용이 (심지어 XML 형식 파일이 옵션을 제공하지 않습니다)도 형식의 파일로, 일치하지 않는 더미 [ "] 상기 문자 잘 경우이를 처리하기 때문에 BCP / 대량 삽입에 조심해야 시작과 끝과 구분자로 [ ","]를 사용하여. [,] 문자가 포함 된 어떠한 경우 기술적으로 CSV 파일 [ "] 문자가 필요하지 않습니다

    그것은 쉼표로 구분 된 파일이 때로는 코미디 제한 파일이라고하는 것이 이런 이유입니다.

    OPENROWSET는 서버에 엑셀이 필요합니다 및 64 비트 환경에서 문제가 될 수있다 - 나는 그것이 64 비트에서 제트에서 Excel을 사용하여 문제가 알고있다.

    파일이 미래에 기대 다를 가능성이있는 경우 SSIS 정말 당신의 최선의 방법이다.

  8. ==============================

    8.u는 당신이 원하는 경우에 아주 달콤한이 코드를 시도 할 수 있습니다 이 코드에서 불필요한 세미콜론을 제거합니다. 예를 들어 데이터가 같은 경우 : "켈리", "레이 놀드", "kelly@reynold.com"

    u는 당신이 원하는 경우에 아주 달콤한이 코드를 시도 할 수 있습니다 이 코드에서 불필요한 세미콜론을 제거합니다. 예를 들어 데이터가 같은 경우 : "켈리", "레이 놀드", "kelly@reynold.com"

    Bulk insert test1
    from 'c:\1.txt' with ( 
        fieldterminator ='","'
        ,rowterminator='\n')
    
    update test1<br>
    set name =Substring (name , 2,len(name))
    where name like **' "% '**
    
    update test1
    set email=substring(email, 1,len(email)-1)
    where email like **' %" '**
    
  9. ==============================

    9.전나무 당신은 데이터 테이블로 가져 오기 CSV 파일로 필요

    전나무 당신은 데이터 테이블로 가져 오기 CSV 파일로 필요

    그럼 당신은 SqlBulkCopy의를 사용하여 대량의 행을 삽입 할 수 있습니다

    using System;
    using System.Data;
    using System.Data.SqlClient;
    
    namespace SqlBulkInsertExample
    {
        class Program
        {
          static void Main(string[] args)
            {
                DataTable prodSalesData = new DataTable("ProductSalesData");
    
                // Create Column 1: SaleDate
                DataColumn dateColumn = new DataColumn();
                dateColumn.DataType = Type.GetType("System.DateTime");
                dateColumn.ColumnName = "SaleDate";
    
                // Create Column 2: ProductName
                DataColumn productNameColumn = new DataColumn();
                productNameColumn.ColumnName = "ProductName";
    
                // Create Column 3: TotalSales
                DataColumn totalSalesColumn = new DataColumn();
                totalSalesColumn.DataType = Type.GetType("System.Int32");
                totalSalesColumn.ColumnName = "TotalSales";
    
                // Add the columns to the ProductSalesData DataTable
                prodSalesData.Columns.Add(dateColumn);
                prodSalesData.Columns.Add(productNameColumn);
                prodSalesData.Columns.Add(totalSalesColumn);
    
                // Let's populate the datatable with our stats.
                // You can add as many rows as you want here!
    
                // Create a new row
                DataRow dailyProductSalesRow = prodSalesData.NewRow();
                dailyProductSalesRow["SaleDate"] = DateTime.Now.Date;
                dailyProductSalesRow["ProductName"] = "Nike";
                dailyProductSalesRow["TotalSales"] = 10;
    
                // Add the row to the ProductSalesData DataTable
                prodSalesData.Rows.Add(dailyProductSalesRow);
    
                // Copy the DataTable to SQL Server using SqlBulkCopy
                using (SqlConnection dbConnection = new SqlConnection("Data Source=ProductHost;Initial Catalog=dbProduct;Integrated Security=SSPI;Connection Timeout=60;Min Pool Size=2;Max Pool Size=20;"))
                {
                    dbConnection.Open();
                    using (SqlBulkCopy s = new SqlBulkCopy(dbConnection))
                    {
                        s.DestinationTableName = prodSalesData.TableName;
    
                        foreach (var column in prodSalesData.Columns)
                            s.ColumnMappings.Add(column.ToString(), column.ToString());
    
                        s.WriteToServer(prodSalesData);
                    }
                }
            }
        }
    }
    
  10. ==============================

    10.그래, K 리처드가 맞다 : FIELDTERMINATOR = ' ","'

    그래, K 리처드가 맞다 : FIELDTERMINATOR = ' ","'

    추가 정보를 원하시면 http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file를 참조하십시오.

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

    11.또한 DTS 또는 SSIS를 사용할 수 있습니다.

    또한 DTS 또는 SSIS를 사용할 수 있습니다.

  12. ==============================

    12.당신은 입력 형식을 제어 할 수 있습니까? | (파이프), 그리고 \ t은 일반적으로 더 나은 필드 터미네이터 있도록.

    당신은 입력 형식을 제어 할 수 있습니까? | (파이프), 그리고 \ t은 일반적으로 더 나은 필드 터미네이터 있도록.

  13. ==============================

    13.당신은 DataTable을로 구문 분석 파일을 가져 오는 방법을 알아낼 경우에, 나는 SQL 서버에 삽입하기위한 SqlBulkInsert 클래스를 건의 할 것입니다.

    당신은 DataTable을로 구문 분석 파일을 가져 오는 방법을 알아낼 경우에, 나는 SQL 서버에 삽입하기위한 SqlBulkInsert 클래스를 건의 할 것입니다.

  14. ==============================

    14.내가 우연히 도움말 사람이 쓰기 때문에 이것은 오래된 질문이다.

    내가 우연히 도움말 사람이 쓰기 때문에 이것은 오래된 질문이다.

    SQL 서버 2017을 소개합니다이 정확한 유스 케이스위한 것입니다 FIELDQUOTE 매개 변수를.

  15. from https://stackoverflow.com/questions/96448/sql-bulk-import-from-csv by cc-by-sa and MIT license