복붙노트

[SQL] SQL 서버로 가져 오기 CSV 파일

SQL

SQL 서버로 가져 오기 CSV 파일

나는 대량 INSERT를 사용하여 SQL Server에 .csv 파일을 가져올 도움을 찾고, 그리고 난 몇 가지 기본적인 질문이 있습니다.

문제 :

여기에 헤더 샘플 CSV는 다음과 같습니다

Name,Class,Subject,ExamDate,Mark,Description
Prabhat,4,Math,2/10/2013,25,Test data for prabhat.
Murari,5,Science,2/11/2013,24,"Test data for his's test, where we can test 2nd ROW, Test."
sanjay,4,Science,,25,Test Only.

수입 및 SQL 문 :

BULK INSERT SchoolsTemp
FROM 'C:\CSVData\Schools.csv'
WITH
(
    FIRSTROW = 2,
    FIELDTERMINATOR = ',',  --CSV field delimiter
    ROWTERMINATOR = '\n',   --Use to shift the control to next row
    TABLOCK
)

해결법

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

    1.기반 SQL 서버 CSV 가져 오기

    기반 SQL 서버 CSV 가져 오기

    해결책

    당신은 구분 기호로, (쉼표)를 사용하는 경우, 필드 종결 자로 쉼표 및 데이터에 쉼표를 구별 할 수있는 방법은 없습니다. 나는 || 같은 다른 FIELDTERMINATOR를 사용합니다. 코드는 같을 것이다이 완벽 쉼표 및 단일 슬래시를 처리합니다.

    해결책

    당신이 대량 삽입을 사용하는 경우 따옴표를 처리 할 수있는 방법이 없습니다, 데이터가 될 것입니다 행에 따옴표 삽입. 테이블에 데이터를 삽입 한 후 당신은 ''와 그 따옴표를 대체 할 수있다.

    update table
    set columnhavingdoublequotes = replace(columnhavingdoublequotes,'"','')
    

    해결책

    때문에 잘못된 데이터 또는 형식의 테이블에로드되지 않은 행을 처리하기 위해, 수 ERRORFILE 속성을 사용하여 처리, 오류 파일 이름을 지정, 그것은 행을 작성합니다 오류 파일에 오류를 가지고. 코드처럼 보일 것입니다.

    BULK INSERT SchoolsTemp
        FROM 'C:\CSVData\Schools.csv'
        WITH
        (
        FIRSTROW = 2,
        FIELDTERMINATOR = ',',  --CSV field delimiter
        ROWTERMINATOR = '\n',   --Use to shift the control to next row
        ERRORFILE = 'C:\CSVDATA\SchoolsErrorRows.csv',
        TABLOCK
        )
    
  2. ==============================

    2.먼저 데이터베이스에있는 CSV 파일을 가져됩니다에서 테이블을 작성해야합니다. 테이블을 만든 후 다음 단계를 수행합니다.

    먼저 데이터베이스에있는 CSV 파일을 가져됩니다에서 테이블을 작성해야합니다. 테이블을 만든 후 다음 단계를 수행합니다.

    SQL Server Management Studio를 사용하여 데이터베이스에 • 로그인

    • 데이터베이스를 선택 작업에 ​​마우스 오른쪽 클릭 -> 데이터 가져 오기 ...

    다음> 버튼을 클릭 •

    • 데이터 소스의 경우, 플랫 파일 소스를 선택합니다. 그런 다음 CSV 파일을 선택하려면 찾아보기 단추를 사용합니다. 당신은 데이터가> 다음 버튼을 클릭하기 전에 가져하는 방법을 구성 시간을 보내십시오.

    • 대상의 경우, 정확한 데이터베이스 공급자를 선택 (예를 들어, SQL 서버 2012, 당신은 SQL 서버 네이티브 클라이언트 11.0을 사용할 수 있습니다). 서버 이름을 입력합니다. 사용 SQL Server 인증 라디오 버튼을 선택합니다. 다음> 버튼을 클릭하기 전에 사용자 이름, 암호 및 데이터베이스를 입력합니다.

    • 원본 테이블 및 뷰 선택 창에서 수행 할 수 있습니다 편집 매핑 다음> 버튼을 클릭하기 전에.

    즉시 실행을 확인 확인란을 선택하고 다음> 버튼을 클릭 •.

    패키지를 실행 마침 버튼을 클릭 •.

    위이 웹 사이트 (나는 그것을 사용하고 테스트 한)에서 발견되었다 :

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

    3.당신은 'CSV'= FIELDQUOTE = ' "'옵션을 FORMAT을 사용한다 :

    당신은 'CSV'= FIELDQUOTE = ' "'옵션을 FORMAT을 사용한다 :

    BULK INSERT SchoolsTemp
    FROM 'C:\CSVData\Schools.csv'
    WITH
    (
        FORMAT = 'CSV', 
        FIELDQUOTE = '"',
        FIRSTROW = 2,
        FIELDTERMINATOR = ',',  --CSV field delimiter
        ROWTERMINATOR = '\n',   --Use to shift the control to next row
        TABLOCK
    )
    
  4. ==============================

    4.데이터 문제에 쉼표를 해결하는 가장 빠르고 쉬운 방법은 쉼표 (예 : 파이프 등) 쉼표 이외의 다른 윈도우의 목록 구분 설정을 설정 한 후 파일을 분리 저장 Excel을 사용하는 것입니다. 이것은 다음 (또는 무엇이든) 파이프를 생성하면 다음 가져올 수있는 당신을 위해 파일을 분리합니다. 이 여기에 설명되어 있습니다.

    데이터 문제에 쉼표를 해결하는 가장 빠르고 쉬운 방법은 쉼표 (예 : 파이프 등) 쉼표 이외의 다른 윈도우의 목록 구분 설정을 설정 한 후 파일을 분리 저장 Excel을 사용하는 것입니다. 이것은 다음 (또는 무엇이든) 파이프를 생성하면 다음 가져올 수있는 당신을 위해 파일을 분리합니다. 이 여기에 설명되어 있습니다.

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

    5.전나무 당신은 데이터 테이블로 가져 오기 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);
                    }
                }
            }
        }
    }
    
  6. ==============================

    6.여기에 내가 그것을 해결할 방법은 다음과 같습니다

    여기에 내가 그것을 해결할 방법은 다음과 같습니다

    행운을 빕니다.

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

    7.그들은 SQL 가져 오기 마법사를 사용하지 않기 때문에 다음과 같이 단계는 다음과 같습니다

    그들은 SQL 가져 오기 마법사를 사용하지 않기 때문에 다음과 같이 단계는 다음과 같습니다

    우리는 당신이 CSV에있는 테이블의 데이터 형식을 구성 할 수 있습니다, CSV 파일을 선택,하지만 CSV에서 그것을 가지고하는 것이 좋습니다.

    인증의 우리의 유형에 따라 우리는이 작업이 완료되면, 선택, 매우 중요한 옵션이 제공됩니다.

    (일반적으로 1부터 시작하지 않음), 우리는 CSV의 ID로 열이 아닌 경우 우리는이 ID를 삽입 사용을 선택, 다음 단계는 마법사를 종료, 우리는 여기에 변경 사항을 검토 할 수 있습니다.

    한편, 다음 창에 경고를 제공하거나 경고 이상은 오류가 관심을 지불 할 필요가 떠날 경우에만이를 무시하는 것입니다 수 있습니다.

    이 링크는 이미지를 가지고있다.

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

    8.제 1 개구에 의해 Excel로 파일을 가져 오기하는 엑셀, 다음 데이터에 가고, TXT 파일에서 가져 오기, 0 접두사 값을 보존 할 CSV 확장을 선택하고 텍스트로 해당 열을 저장 엑셀은 그렇지 않으면 0 선두를 삭제하기 때문에 (NOT 더블 클릭 DO 당신이 시작 필드에 숫자 데이터가있는 경우 Excel에서 열 수 0 [영]). 그리고 단지 탭으로 구분 된 텍스트 파일로 출력 저장합니다. 당신은 엑셀로 가져 오기 할 때 당신은 yourcompany와, LLC 같은 필드에 문자열의 중간에 그 따옴표도 보존되도록 텍스트를 선택하는 등 일반, TEXT로 저장하는 옵션을 얻을 ...

    제 1 개구에 의해 Excel로 파일을 가져 오기하는 엑셀, 다음 데이터에 가고, TXT 파일에서 가져 오기, 0 접두사 값을 보존 할 CSV 확장을 선택하고 텍스트로 해당 열을 저장 엑셀은 그렇지 않으면 0 선두를 삭제하기 때문에 (NOT 더블 클릭 DO 당신이 시작 필드에 숫자 데이터가있는 경우 Excel에서 열 수 0 [영]). 그리고 단지 탭으로 구분 된 텍스트 파일로 출력 저장합니다. 당신은 엑셀로 가져 오기 할 때 당신은 yourcompany와, LLC 같은 필드에 문자열의 중간에 그 따옴표도 보존되도록 텍스트를 선택하는 등 일반, TEXT로 저장하는 옵션을 얻을 ...

    BULK INSERT dbo.YourTableName
    FROM 'C:\Users\Steve\Downloads\yourfiletoIMPORT.txt'
    WITH (
    FirstRow = 2, (if skipping a header row)
    FIELDTERMINATOR = '\t',
    ROWTERMINATOR   = '\n'
    )
    

    나는 형식과 Fieldquote 기능을 사용할 수 원하는하지만 SSMS의 내 버전에서 지원하지 않는 것

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

    9.내가 허용 대답이 있다는 것을 알고 있지만 아직, 어쩌면 도움이 누군가가 자신의 문제를 해결하기 위해 나의 시나리오를 공유 할 TOOLS

    내가 허용 대답이 있다는 것을 알고 있지만 아직, 어쩌면 도움이 누군가가 자신의 문제를 해결하기 위해 나의 시나리오를 공유 할 TOOLS

    대본 나중에였다보기에 표시하는 CSV 형식의 데이터 집합을로드하는 나는 대량로드를 사용하려고하지만 사용 된 대량로드와 같은로드 할 수 없습니다입니다

    FIELDTERMINATOR = ','
    

    엑셀 셀은 또한, 사용 된 나는 코드 - 첫 번째 방법을 사용뿐만 아니라 나중에 속성을 사용했다있는 모델에, SSMS DB에서 모델을 작성하고 있던 직접 때문에, 나는 또한 플랫 파일 소스를 사용 할 수 없습니다.

    해결책

  10. from https://stackoverflow.com/questions/15242757/import-csv-file-into-sql-server by cc-by-sa and MIT license