2014-08-29 2 views
0

BULK INSERT을 사용하여 가져 오기를 시도하는 CSV 파일이 있습니다. 문제는 텍스트 내에 쉼표가 있으면 쉼표가없는 경우 따옴표로 묶지 않고 인용 부호로 묶을 필드가 있다는 것입니다. 추가 쉼표가 있으면 삽입하는 동안 잘못된 열 개수로 인해 SQL Server에서 오류가 발생합니다. 당신이 볼 수 있듯이, 세 번째 행은 주소 필드에서 쉼표, 따라서 주소 필드가 인용을 포함SQL Server 조건부 대체 CSV 데이터

928 Riata Dr,Magnolia,TX,77354,4/15/2014 
22 Roberts Ave.,McKinney,TX,75069,4/15/2014 
"5531 Trinity Place, #22",San Antonio,TX,78212,4/15/2014 

: 여기

는 샘플 데이터 집합입니다. BULK INSERT 명령이이 때문에 오류를 던지고 있기 때문에 파일 내용을로드하기 전에 내용을 제거해야한다고 가정합니다. 누군가가 내용을 읽어 나는 (SQL과) 파일을 열 필요가 파일 내용을, 스크럽, 내부 쉼표의 조건 교체를 할 수있는 더 나은 솔루션

을하지 않는

(내에서 발견 따옴표). 그 쉼표가 실제로 존재할 필요가 없기 때문에, 나는 단지 ''(공백)로 바꿀 수 있습니다.

그런 다음 원하지 않는 다른 문자를 바꾸기 위해 데이터를 가져온 후에 별도로 따옴표를 처리 할 수 ​​있습니다.

나는 논리가 소리라고 생각한다. 문제는 구문이다. SQL Server에서 REGEX와 관련된 구문을 찾을 수없는 것 같습니다 (Booo Microsoft). 어떤 경우 쉼표가 따옴표 안에 들어 있는지 확인하고 다른 경우에는 따옴표로 바꿀 수 있습니다.

의견, 제안, 코드 등 무엇입니까?

미리 감사드립니다.

답변

0

이것은 너무 간단하게 들리지만 쉼표 만 바꿀 수 있다면 Excel 또는 OpenOffice Calc에서 csv를 열고 대체 찾기를 수행 할 수 있습니까? 방금 CSV로 시도했지만 정상적으로 작동했습니다. csv는 올바르게 구분됩니다.

아마도 엑셀이 쉼표로 인해 여분의 셀로 열리는 것과 같은 경우, 내 대답은 어리 석다. 그러나 SQL로 시작한 후에보다는 스프레드 시트 응용 프로그램에서이를 처리하는 것이 더 합리적입니다.

탭 등으로 쉼표 이외의 다른 값으로 구분해야 할 수도 있습니다. 이전에 SQL 가져 오기를 수행해야했습니다. 대부분의 경우 탭으로 구분 된 txt 파일로 저장하고 SQL에 업로드 할 수 있습니다.

Excel에서는 이러한 유형의 문제가 발생할 수 있습니다. Excel 및 탭으로 구분 된 SQL 가져 오기에 대한 도움말은 내 대답 here을 참조하십시오.

+0

빠른 답장을 보내 주셔서 감사합니다. 자동화를 위해 프로그래밍 방식으로이 작업을 수행하려고합니다. 이것은 수동으로 실행하고 싶지 않은 일일 작업입니다. 당신의 해결책은 효과가 있습니다. 그러나 매일 파일을 수동으로 터치하고 싶지는 않습니다. – sadmicrowave

+0

아, 알겠습니다, 전적으로 이해합니다. 그래서이 게시물에 대한 가장 최근의 답변은 예를 들어, 탭으로 구분 된 가져 오기 이외의 다른 대답이 없다는 것입니다. http://stackoverflow.com/questions/21226107/sql-server-bulk-insert-csv -with-data-having-comma는 SQL이 CSV 파일을 직접 지원하지 않기 때문에 (즉, 거기에 몇 가지 다른 대답이있을 수 있습니다.) 어떤 이유로 든이 .Net 솔루션을 구현하기로 결정한 경우, LumenWorks CSV 리더기가 최근 성공을 거두었습니다. 그 외에도 내가 어떤 도움이 될지 모르겠습니다. – JackArbiter