2016-07-11 4 views
2

CSV에서 데이터를 가져와 테이블로 가져 오는 BULK INSERT 작업이 있습니다. 문제는 열 중 하나에 쉼표가 포함될 수 있으므로 가져 오기가 예상대로 작동하지 않습니다.대량 삽입 fmt 텍스트 한정자

나는 형식 (FMT) 파일을 만들어이 문제를 해결하기 위해 노력했습니다, 내용이있는 나는 아래에 자세히 설명했습니다 -

9.0 
6 
1  SQLCHAR  0  50  ","  1  "Identifier"         Latin1_General_CI_AS 
2  SQLCHAR  0  50  ","  2  "Name"            Latin1_General_CI_AS 
3  SQLCHAR  0  50  ","  3  "Date of Birth"           Latin1_General_CI_AS 
4  SQLCHAR  0  50  ","  4  "Admission"            Latin1_General_CI_AS 
5  SQLCHAR  0  50  ","  5  "Code"        Latin1_General_CI_AS 
6  SQLCHAR  0  50  "\r\n" 6  "Length"              Latin1_General_CI_AS 

열 나에게 원인이 고통은 열이 "이름"입니다.

필자는 몇 가지 항목을 꼼꼼한 텍스트로 인식하고 쉼표를 포함하고 있지만 필자가 원하는 결과를 얻지 못했습니다. 나는 다음에 변경하는 경우

는 : -

"\","는 - "리처드슨, 매트

이 정확하지를, 그래서 다른에 제안 내가 대신이 시도 -이 같은 것을 얻을 포럼/사이트 : -

"\",\"" 

이 실제로는 전혀 작동하지 않고 나에게 오류를 제공

Cannot obtain the required interface ("IID_IColumnsInfo") from OLE DB provider "BULK" for linked server "(null)".Bulk load: An unexpected end of file was encountered in the data file. 

다른 조합을 시도했지만이 권리를 얻을 수 없습니다. 어떤 도움이나지도라도 크게 감사 할 것입니다.

답변

1

형식 파일과 관련하여 질문에 답변하지는 않지만 가능하면 해결 방법을 얻을 수 있습니다.

형식 파일은 1980 년대부터 나에게 이해가 쉽지 않습니다. 대량 삽입은 까다 롭고 까다 롭습니다. 따라서 필자는 몇 줄의 powershell을 사용하여 데이터를 정리하는 경향이 있습니다.

당신은 아이디어를 얻을
Import-Csv -Path $dirtyCsv | 
ConvertTo-CSV -NoType -Delimiter '|' | 
%{ $_.Replace('"','') } | 
Out-File $cleanCsv 

...

이를 : 여기 분리 파이프에 CSV를 변환하는 데 최근에 사용 된 예는, 출력에 인용 어떤 임의의를 제거하고 기록에 쉼표를 허용하도록이다 간단하게 수입 :

BULK INSERT SomeTable FROM 'clean.csv' WITH (FIRSTROW = 2, FIELDTERMINATOR = '|', ROWTERMINATOR = '\n') 

희망이 도움이됩니다.