program story

각 열에 varchar (MAX)를 사용했지만 CSV 파일을 가져 오는 동안 SQL Server의 오류

inputbox 2020. 12. 14. 08:09
반응형

각 열에 varchar (MAX)를 사용했지만 CSV 파일을 가져 오는 동안 SQL Server의 오류


큰 CSV 파일 (몇 기가 바이트)을 SQL Server에 삽입하려고하지만 가져 오기 마법사를 통해 마지막으로 파일을 가져 오려고하면 다음 오류 보고서가 표시됩니다.

  • (오류) 메시지 실행 중 오류 0xc02020a1 : 데이터 흐름 작업 1 : 데이터 변환에 실패했습니다. ""제목 ""열에 대한 데이터 변환이 상태 값 4 및 상태 텍스트 "텍스트가 잘렸거나 하나 이상의 문자가 대상 코드 페이지에서 일치하지 않았습니다."를 리턴했습니다. (SQL Server 가져 오기 및 내보내기 마법사)

  • 오류 0xc020902a : 데이터 흐름 작업 1 : "Source-Train_csv.Outputs [Flat File Source Output] .Columns ["Title "]"이 잘림이 발생하여 실패하고 "Source-Train_csv.Outputs [Flat File Source]에서 잘림 행 처리가 발생했습니다. Output] .Columns [ "Title"] "은 잘림 실패를 지정합니다. 지정된 구성 요소의 지정된 개체에서 잘림 오류가 발생했습니다. (SQL Server 가져 오기 및 내보내기 마법사)

  • 오류 0xc0202092 : 데이터 흐름 작업 1 : 데이터 행 2에서 "C : \ Train.csv"파일을 처리하는 동안 오류가 발생했습니다. (SQL Server 가져 오기 및 내보내기 마법사)

  • 오류 0xc0047038 : 데이터 흐름 태스크 1 : SSIS 오류 코드 DTS_E_PRIMEOUTPUTFAILED. Source-Train_csv의 PrimeOutput 메서드가 오류 코드 0xC0202092를 반환했습니다. 파이프 라인 엔진이 PrimeOutput ()을 호출 할 때 구성 요소가 실패 코드를 반환했습니다. 실패 코드의 의미는 구성 요소에 의해 정의되지만 오류는 치명적이며 파이프 라인 실행이 중지되었습니다. 실패에 대한 자세한 정보와 함께이 전에 게시 된 오류 메시지가있을 수 있습니다. (SQL Server 가져 오기 및 내보내기 마법사)

먼저 파일을 삽입 할 테이블을 만들고 각 열에 varchar (MAX)를 포함하도록 설정 했으므로이 잘림 문제가 계속 발생할 수있는 방법을 이해할 수 없습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?


SQL Server 가져 오기 및 내보내기 마법사에서 Advanced의 소스 데이터 유형을 조정할 수 있습니다 (새 테이블을 생성하는 경우 출력의 데이터 유형이되지만 그렇지 않으면 소스 데이터를 처리하는 데만 사용됨).

데이터 유형 대신, MS SQL에 비해 귀찮게 다른 VARCHAR(255)그것의 DT_STR출력 컬럼 폭으로 설정 될 수있다 255. 들어 VARCHAR(MAX)그건 DT_TEXT.

따라서 데이터 소스 선택의 Advanced탭에서 문제가되는 열의 데이터 유형을에서 DT_STRDT_TEXT변경하십시오 (여러 열을 선택하고 한 번에 모두 변경할 수 있음).

가져 오기 및 내보내기 마법사-데이터 소스-고급


이 답변은 보편적으로 적용되지 않을 수 있지만 작은 텍스트 파일을 가져올 때 발생한이 오류의 발생을 수정했습니다. 플랫 파일 공급자가 소스의 고정 된 50 자 텍스트 열을 기반으로 가져오고 있었는데 이는 잘못되었습니다. 대상 열을 다시 매핑해도 문제에 영향을주지 않았습니다.

이 문제를 해결하려면 플랫 파일 공급자의 "데이터 소스 선택"에서 파일을 선택한 후 입력 열 목록 아래에 "유형 제안 .."단추가 나타납니다. 이 버튼을 누른 후 대화창에 변경 사항이 없더라도 플랫 파일 공급자는 소스 .csv 파일을 다시 쿼리 한 다음 소스 파일의 필드 길이 올바르게 결정했습니다.

이 작업이 완료되면 추가 문제없이 가져 오기가 진행되었습니다.


버그라고 생각합니다. 해결 방법을 적용한 다음 다시 시도하십시오 : http://support.microsoft.com/kb/281517 .

또한 고급 탭으로 이동하여 대상 열 길이가 Varchar (max)인지 확인하십시오.


고급 편집기로 문제가 해결되지 않았습니다. 대신 메모장 (또는 좋아하는 텍스트 / xml 편집기)을 통해 dtsx 파일을 편집하고 속성의 값을 수동으로 대체해야했습니다.

length="0" dataType="nText" (유니 코드를 사용하고 있습니다)

text / xml 모드에서 편집하기 전에 항상 dtsx 파일을 백업하십시오.

SQL Server 2008 R2 실행


고급 탭으로 이동 ----> 열의 데이터 유형 ---> 여기에서 데이터 유형을 DT_STR에서 DT_TEXT 및 열 너비 255로 변경합니다. 이제 완벽하게 작동하는지 확인할 수 있습니다.


문제 : Jet OLE DB 공급자는 레지스트리 키를 읽고 원본 열의 유형을 추측하기 위해 읽을 행 수를 결정합니다. 기본적으로이 키의 값은 8입니다. 따라서 공급자는 소스 데이터의 처음 8 개 행을 스캔하여 열의 데이터 유형을 결정합니다. 필드가 텍스트처럼 보이고 데이터 길이가 255자를 초과하는 경우 열은 메모 필드로 입력됩니다. 따라서 원본의 처음 8 개 행에 길이가 255 자보다 큰 데이터가 없으면 Jet는 데이터 형식의 특성을 정확하게 확인할 수 없습니다. 내 보낸 시트에서 데이터의 처음 8 행 길이가 255보다 작기 때문에 소스 길이를 VARCHAR (255)로 간주하고 길이가 더 긴 열에서 데이터를 읽을 수 없습니다.

수정 : 해결책은 주석 열을 내림차순으로 정렬하는 것입니다. 2012 년부터는 가져 오기 마법사의 고급 탭에서 값을 업데이트 할 수 있습니다.

참고 URL : https://stackoverflow.com/questions/18600040/errors-in-sql-server-while-importing-csv-file-despite-varcharmax-being-used-fo

반응형