형식 파일의 필드 종결 자 문제

txt 형식의 데이터 파일이 있으며 다음 명령에서 대량 삽입으로로드하는 데 사용했습니다.

Bulk insert [table1] FROM "data.txt" WITH ( FIELDTERMINATOR ="|", ROWTERMINATOR ="0x0a", ) 

코드가 잘 작동합니다. 그러나 대량 삽입이있는 형식 파일을 사용하여 파일을로드하는 동안 마지막 행에 대한 필드 종결자를 지정하는 데 몇 가지 문제가 발생했습니다.

다음은 마지막 행에 대한 사양입니다. 형식 파일 :

21 SQLCHAR 0 20 "0x0a" 21 misc_costs SQL_Latin1_General_CP1_CI_AS 

종결 자로 “0x0a”를 사용하면 다음 오류가 발생합니다.

행 2, 열 1 (var1)에 대한 대량로드 데이터 변환 오류 (잘림).

“\ n”을 사용하면 데이터가 로드되지만 “|” 마지막 열에도로드됩니다. 예를 들어 “0.5 |” “0.5”대신.

“| \ n”, “0x0a”, “| 0x0a”, “\ r \ n”은 “|”와 동일한 오류를 반환합니다.

행 2, 열 1 (var1)에 대한 대량로드 데이터 변환 오류 (잘림).

I ” m using sql-server 2016, windows 10 64bit.

누구나 도와 줄 수 있나요? 미리 도와 주셔서 감사합니다!

Jason

댓글

  • ' 지금 몇 가지 질문을 했으므로이 페이지를 살펴보세요. sommarskog.se/bulkload.html
  • @sp_BlitzErik, 회신 해 주셔서 감사합니다.이 문서는 매우 유용하며 MSDN 사이트보다 더 많은 정보를 제공합니다. 4.1에서 예제를 읽는 동안 , 필드 종결 자 " \ " \ r \ n "와 혼동되었습니다. 따옴표는 정말 완전한 메모입니다. 유형입니까?
  • 올바르게 기억하면 ' 이스케이프 시퀀스입니다. 여기에 ' 더 나은 설명이 있습니다.

답변

하루 종일 Line Feed / Hex 코드로 고생 한 후 마침내 내 문제가 형식 파일의 누락 된 열로 인해 발생했음을 발견했습니다. 데이터 세트는 나에게 새롭고 실제로는 22 개의 행이있는 동안 21 개의 행이 있다고 생각했습니다. 이것이 바로 SQL Server가 데이터 파일에서 마지막 “|”을 계속로드하는 이유입니다.

다음은 Windows와 다른 행 종결자를 사용하여 UNIX 시스템에서 데이터 파일을로드하는 데 관심이있는 다른 사용자를위한 참조입니다. 방법 :

  1. 대량 삽입을 사용하고 행 종결자를 “0x0a”로 설정합니다.
  2. 형식 파일을 사용하고 마지막 필드의 필드 종결자를 “\ n으로 설정합니다. “.
  3. Char (10) 함수와 함께 동적 SQL을 사용하여 명령 문자열에 줄 바꿈 (LF)을 삽입 한 다음 명령 문자열을 exec ()합니다.

이 방법을 시도하기 전에 메모장을 사용하여 모든 제어 문자를 표시하여 텍스트 파일에서 사용하는 제어 문자를 확인하십시오.

이 방법 중 어느 것도 작동하지 않으면 줄 외에 다른 문제가있을 수 있습니다. 피드 / 행 종결 자.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다