[SQL] CSV에서 SQL 대량 가져 오기
SQLCSV에서 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.나는 이것이 진정한 해결책이 아니다 알고 있지만 나는 모두를위한 NVARCHAR 세트를 가져 오기 위해 더미 테이블을 사용합니다. 그럼 그것은 꽤하지 않습니다.은 "문자를 제거합니다 및 변환을 수행 삽입을하지만 일을한다.
나는 이것이 진정한 해결책이 아니다 알고 있지만 나는 모두를위한 NVARCHAR 세트를 가져 오기 위해 더미 테이블을 사용합니다. 그럼 그것은 꽤하지 않습니다.은 "문자를 제거합니다 및 변환을 수행 삽입을하지만 일을한다.
-
==============================
2.시도 FIELDTERMINATOR = ' ","'
시도 FIELDTERMINATOR = ' ","'
다음은 첫 번째와 마지막 인용 도움에 큰 링크입니다 ... 그는이 SP 하위 문자열 사용보기 방법
http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file
-
==============================
3.가끔 사용하는 또 다른 해킹, 다음, Excel에서 CSV를 열고 각 행의 마지막 셀에 당신의 SQL 문을 작성하는 것입니다. 예를 들면 :
가끔 사용하는 또 다른 해킹, 다음, Excel에서 CSV를 열고 각 행의 마지막 셀에 당신의 SQL 문을 작성하는 것입니다. 예를 들면 :
=concatenate("insert into myTable (columnA,columnB) values ('",a1,"','",b1,"'")")
채우기 다운 당신을 위해 모든 행이 점을 채울 수 있습니다. 그럼 그냥 복사하여 새 쿼리 창에 출력을 붙여 넣습니다.
그것은 구식,하지만 당신은 단지 당신이 그것을 할 수있는 '적절한'방법에있는 모든 모호한 문서를 읽는 장난 저장하는 동안 번 수입을해야합니다.
-
==============================
4.OPENROWSET을보십시오. 이것은 엑셀 물건을 가져올 수 있습니다. 당신은 단지 올바른 [ConnectionString을] 알아 내야 있도록 엑셀, [2] CSV 파일을 열 수 있습니다.
OPENROWSET을보십시오. 이것은 엑셀 물건을 가져올 수 있습니다. 당신은 단지 올바른 [ConnectionString을] 알아 내야 있도록 엑셀, [2] CSV 파일을 열 수 있습니다.
[2] : 드라이버 = {Microsoft 텍스트 드라이버 (* .txt; * .csv)로}; DBQ = C : \ txtFilesFolder \; 확장 = 오름차순, CSV, 탭, TXT;
-
==============================
5.아이디 말 사용 FileHelpers의 오픈 소스 라이브러리를
아이디 말 사용 FileHelpers의 오픈 소스 라이브러리를
-
==============================
6.수행 프로그래밍 방식으로이 작업을 수행 할 필요가, 또는 한 번 샷?
수행 프로그래밍 방식으로이 작업을 수행 할 필요가, 또는 한 번 샷?
엔터프라이즈 관리자를 사용하여 데이터 가져 오기는 당신이 당신의 구분 기호를 선택할 수 있습니다 마우스 오른쪽 단추로 클릭합니다.
-
==============================
7.당신은 BSP 또는 대량 삽입도는 인용이 (심지어 XML 형식 파일이 옵션을 제공하지 않습니다)도 형식의 파일로, 일치하지 않는 더미 [ "] 상기 문자 잘 경우이를 처리하기 때문에 BCP / 대량 삽입에 조심해야 시작과 끝과 구분자로 [ ","]를 사용하여. [,] 문자가 포함 된 어떠한 경우 기술적으로 CSV 파일 [ "] 문자가 필요하지 않습니다
당신은 BSP 또는 대량 삽입도는 인용이 (심지어 XML 형식 파일이 옵션을 제공하지 않습니다)도 형식의 파일로, 일치하지 않는 더미 [ "] 상기 문자 잘 경우이를 처리하기 때문에 BCP / 대량 삽입에 조심해야 시작과 끝과 구분자로 [ ","]를 사용하여. [,] 문자가 포함 된 어떠한 경우 기술적으로 CSV 파일 [ "] 문자가 필요하지 않습니다
그것은 쉼표로 구분 된 파일이 때로는 코미디 제한 파일이라고하는 것이 이런 이유입니다.
OPENROWSET는 서버에 엑셀이 필요합니다 및 64 비트 환경에서 문제가 될 수있다 - 나는 그것이 64 비트에서 제트에서 Excel을 사용하여 문제가 알고있다.
파일이 미래에 기대 다를 가능성이있는 경우 SSIS 정말 당신의 최선의 방법이다.
-
==============================
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.전나무 당신은 데이터 테이블로 가져 오기 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.그래, K 리처드가 맞다 : FIELDTERMINATOR = ' ","'
그래, K 리처드가 맞다 : FIELDTERMINATOR = ' ","'
추가 정보를 원하시면 http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file를 참조하십시오.
-
==============================
11.또한 DTS 또는 SSIS를 사용할 수 있습니다.
또한 DTS 또는 SSIS를 사용할 수 있습니다.
-
==============================
12.당신은 입력 형식을 제어 할 수 있습니까? | (파이프), 그리고 \ t은 일반적으로 더 나은 필드 터미네이터 있도록.
당신은 입력 형식을 제어 할 수 있습니까? | (파이프), 그리고 \ t은 일반적으로 더 나은 필드 터미네이터 있도록.
-
==============================
13.당신은 DataTable을로 구문 분석 파일을 가져 오는 방법을 알아낼 경우에, 나는 SQL 서버에 삽입하기위한 SqlBulkInsert 클래스를 건의 할 것입니다.
당신은 DataTable을로 구문 분석 파일을 가져 오는 방법을 알아낼 경우에, 나는 SQL 서버에 삽입하기위한 SqlBulkInsert 클래스를 건의 할 것입니다.
-
==============================
14.내가 우연히 도움말 사람이 쓰기 때문에 이것은 오래된 질문이다.
내가 우연히 도움말 사람이 쓰기 때문에 이것은 오래된 질문이다.
SQL 서버 2017을 소개합니다이 정확한 유스 케이스위한 것입니다 FIELDQUOTE 매개 변수를.
from https://stackoverflow.com/questions/96448/sql-bulk-import-from-csv by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 3 개 테이블과 조인 Laravel (0) | 2020.06.05 |
---|---|
[SQL] 오류 코드 :와 1055 호환되지 않는 sql_mode = ONLY_FULL_GROUP_BY (0) | 2020.06.05 |
[SQL] 행에서 최대 값을 얻기과 다른 테이블에 합류 (0) | 2020.06.05 |
[SQL] 어떻게 SQL Server 2005의 테이블에 NTEXT 필드에 유니 코드 / 비 ASCII 문자를 찾을 수 있습니까? (0) | 2020.06.05 |
[SQL] 우리는 다른 테이블의 기본 키가 아닌 외부 키를 가질 수있다? (0) | 2020.06.05 |