[SQL] SQL 서버로 가져 오기 CSV 파일
SQLSQL 서버로 가져 오기 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.기반 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.먼저 데이터베이스에있는 CSV 파일을 가져됩니다에서 테이블을 작성해야합니다. 테이블을 만든 후 다음 단계를 수행합니다.
먼저 데이터베이스에있는 CSV 파일을 가져됩니다에서 테이블을 작성해야합니다. 테이블을 만든 후 다음 단계를 수행합니다.
SQL Server Management Studio를 사용하여 데이터베이스에 • 로그인
• 데이터베이스를 선택 작업에 마우스 오른쪽 클릭 -> 데이터 가져 오기 ...
다음> 버튼을 클릭 •
• 데이터 소스의 경우, 플랫 파일 소스를 선택합니다. 그런 다음 CSV 파일을 선택하려면 찾아보기 단추를 사용합니다. 당신은 데이터가> 다음 버튼을 클릭하기 전에 가져하는 방법을 구성 시간을 보내십시오.
• 대상의 경우, 정확한 데이터베이스 공급자를 선택 (예를 들어, SQL 서버 2012, 당신은 SQL 서버 네이티브 클라이언트 11.0을 사용할 수 있습니다). 서버 이름을 입력합니다. 사용 SQL Server 인증 라디오 버튼을 선택합니다. 다음> 버튼을 클릭하기 전에 사용자 이름, 암호 및 데이터베이스를 입력합니다.
• 원본 테이블 및 뷰 선택 창에서 수행 할 수 있습니다 편집 매핑 다음> 버튼을 클릭하기 전에.
즉시 실행을 확인 확인란을 선택하고 다음> 버튼을 클릭 •.
패키지를 실행 마침 버튼을 클릭 •.
위이 웹 사이트 (나는 그것을 사용하고 테스트 한)에서 발견되었다 :
-
==============================
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.데이터 문제에 쉼표를 해결하는 가장 빠르고 쉬운 방법은 쉼표 (예 : 파이프 등) 쉼표 이외의 다른 윈도우의 목록 구분 설정을 설정 한 후 파일을 분리 저장 Excel을 사용하는 것입니다. 이것은 다음 (또는 무엇이든) 파이프를 생성하면 다음 가져올 수있는 당신을 위해 파일을 분리합니다. 이 여기에 설명되어 있습니다.
데이터 문제에 쉼표를 해결하는 가장 빠르고 쉬운 방법은 쉼표 (예 : 파이프 등) 쉼표 이외의 다른 윈도우의 목록 구분 설정을 설정 한 후 파일을 분리 저장 Excel을 사용하는 것입니다. 이것은 다음 (또는 무엇이든) 파이프를 생성하면 다음 가져올 수있는 당신을 위해 파일을 분리합니다. 이 여기에 설명되어 있습니다.
-
==============================
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.여기에 내가 그것을 해결할 방법은 다음과 같습니다
여기에 내가 그것을 해결할 방법은 다음과 같습니다
행운을 빕니다.
-
==============================
7.그들은 SQL 가져 오기 마법사를 사용하지 않기 때문에 다음과 같이 단계는 다음과 같습니다
그들은 SQL 가져 오기 마법사를 사용하지 않기 때문에 다음과 같이 단계는 다음과 같습니다
우리는 당신이 CSV에있는 테이블의 데이터 형식을 구성 할 수 있습니다, CSV 파일을 선택,하지만 CSV에서 그것을 가지고하는 것이 좋습니다.
인증의 우리의 유형에 따라 우리는이 작업이 완료되면, 선택, 매우 중요한 옵션이 제공됩니다.
(일반적으로 1부터 시작하지 않음), 우리는 CSV의 ID로 열이 아닌 경우 우리는이 ID를 삽입 사용을 선택, 다음 단계는 마법사를 종료, 우리는 여기에 변경 사항을 검토 할 수 있습니다.
한편, 다음 창에 경고를 제공하거나 경고 이상은 오류가 관심을 지불 할 필요가 떠날 경우에만이를 무시하는 것입니다 수 있습니다.
이 링크는 이미지를 가지고있다.
-
==============================
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.내가 허용 대답이 있다는 것을 알고 있지만 아직, 어쩌면 도움이 누군가가 자신의 문제를 해결하기 위해 나의 시나리오를 공유 할 TOOLS
내가 허용 대답이 있다는 것을 알고 있지만 아직, 어쩌면 도움이 누군가가 자신의 문제를 해결하기 위해 나의 시나리오를 공유 할 TOOLS
대본 나중에였다보기에 표시하는 CSV 형식의 데이터 집합을로드하는 나는 대량로드를 사용하려고하지만 사용 된 대량로드와 같은로드 할 수 없습니다입니다
FIELDTERMINATOR = ','
엑셀 셀은 또한, 사용 된 나는 코드 - 첫 번째 방법을 사용뿐만 아니라 나중에 속성을 사용했다있는 모델에, SSMS DB에서 모델을 작성하고 있던 직접 때문에, 나는 또한 플랫 파일 소스를 사용 할 수 없습니다.
해결책
from https://stackoverflow.com/questions/15242757/import-csv-file-into-sql-server by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MySQL의 테이블이 마지막으로 업데이트 할 때 어떻게 알 수 있습니까? (0) | 2020.03.15 |
---|---|
[SQL] 어떻게 저장 프로 시저와 DbContext.Database.SqlQuery <TElement> (SQL, PARAMS)를 사용 하는가? EF 코드 첫 번째 CTP5 (0) | 2020.03.15 |
[SQL] MS SQL 서버 - 지정된 이름을 가진 열을 포함하는 모든 테이블을 찾기 (0) | 2020.03.15 |
[SQL] 나는 SQL 저장 프로 시저에 입력 매개 변수로 열 이름을 전달할 수 있습니다 (0) | 2020.03.15 |
[SQL] PostgreSQL의 '분에 의해'쿼리에 대한 행의 수를 실행 (0) | 2020.03.15 |