your programing

Excel 파일에서 가져올 때 텍스트가 잘렸거나 하나 이상의 문자가 대상 코드 페이지에서 일치하지 않았습니다.

lovepro 2020. 12. 29. 08:05
반응형

Excel 파일에서 가져올 때 텍스트가 잘렸거나 하나 이상의 문자가 대상 코드 페이지에서 일치하지 않았습니다.


4 개의 텍스트 열이있는 Excel 파일이 있습니다. 그중 하나는 가장 긴 값을 가진 ShortDescription입니다. SQL Server 2008 데이터베이스에 4 개의 열이있는 테이블을 만들었고 ShortDescription 열 유형은 NvarChar (Max)로 설정되었습니다.

그러나 SSIS 가져 오기 및 내보내기 대화 상자를 사용할 때 OnTruncation 옵션을 무시로 설정하더라도 제목에 언급 된 오류가 계속 표시됩니다.

열 데이터를 지우려고했지만 성공했습니다 (그래서 문제가 ShortDescription 열에 있는지 확인했습니다). 나는 전체 데이터를 다른 엑셀 워크 북에 복사하려고했지만 여전히 운이 없다.

어떤 아이디어 ???


SSIS 대화 상자에서 Excel 원본을 사용하여 가져 오려고한다고 가정합니까?

그렇다면 문제는 SSIS가 Excel 원본을 만들 때 스프레드 시트의 시작 부분에서 일부 행을 샘플링하기 때문일 수 있습니다. [ShortDescription] 열에서 너무 큰 것을 발견하지 못하면 기본적으로 255 자 텍스트 열로 설정됩니다.

따라서 잘리지 않고 많은 양의 데이터가있는 행이 포함 된 열에서 데이터를 가져 오려면 두 가지 옵션이 있습니다.

  1. 샘플링 된 행 중 하나 이상에있는 [ShortDescription] 열에 255 자보다 긴 값이 포함되어 있는지 확인해야합니다. 이를 수행하는 한 가지 방법은 REPT () 함수 (예 : = REPT ( 'z', 4000))를 사용하는 것입니다. 그러면 문자 'z'의 4000 문자열이 생성됩니다.
  2. 이러한 행을 포함하려면 Jet Excel 드라이버에서 샘플링 한 행 수를 늘려야합니다. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel(시스템이 x64이면 HKEY_LOCAL_MACHINE\SOFTWARE\wow6432node\Microsoft\Jet\4.0\Engines\Excel) 레지스트리 키 아래 의 TypeGuessRows 값을 늘려 샘플링되는 행 수를 늘릴 수 있습니다 .

다음 두 링크에서 자세한 정보를 볼 수 있습니다.

더 자세히 설명하기 위해 SSIS는 마법사 뒤에있는 3 개의 개체, Excel 데이터 원본 개체, SQL 테이블 대상 개체 및 이들 사이의 데이터 흐름 연산자를 만듭니다. Excel 원본 개체는 원본 데이터를 정의하며 다른 두 개체와 독립적으로 존재합니다. 따라서 생성되면 제가 설명한 샘플링이 완료되고 소스 열 크기가 설정됩니다. 따라서 데이터 흐름 연산자가 실행되고 Excel에서 데이터를 가져와 테이블에 넣으려고 할 때 이미 255 자로 제한된 데이터 소스를보고 있습니다.


플랫으로 구분 된 파일에서 SQL Server로 가져올 때이 문제가 발생했습니다. 해결책은 오류 메시지에서 문제가되는 열의 'OutputColumnWidth'값을 업데이트하는 것이 었습니다. 가져 오기 마법사의 '데이터 소스 선택'양식에서 내 소스는 플랫 파일이었습니다. 가장 왼쪽 창에서 '고급'을 선택합니다. 그런 다음 개별 열의 속성을 설정할 수 있습니다. 제 경우에는 대부분의 열에 대한 'OutputColumnWidth'가 '50'으로 기본 설정되었습니다. 플랫 파일의 값을 자르지 않는 더 큰 값으로 업데이트했습니다.

여기에 이미지 설명 입력


작업을 시작하는 간단한 방법은 가져올 파일을 편집하고 첫 번째 지점에 새 행을 만드는 것입니다. 그렇게하면 항상 샘플링됩니다. 그런 다음 255자를 초과 할 수있는 열에 대해 255자를 셀에 추가하면 작동합니다. 가져온 후 추가 한 정크 행을 삭제하면됩니다.


중국어 문자와 유효하지 않은 (큰) 문자열이있는 큰 파일을 가져 오려고 할 때이 오류가 발생했습니다.

텍스트 파일은 UTF8 형식으로 저장되었습니다.

내 설정 :

일반 옵션에서 (아무것도 변경하지 않음) :

- Locale: English (United States) 
- Unicode: Unchecked
- Code Page: 65001 (UTF-8)

왼쪽에 고급 옵션이 있습니다.

- DataType (for column): Unicode String [DT_WSTR] (changed)
- OutputColumnWidth: 4000 (that's the maximum) (changed)

검토 데이터 형식 매핑

- On Error: Ignore
- On Truncation: Ignore

내 대상 열의 너비는 50입니다.

이 설정에 오류가 없습니다.


이 문제를 해결하기 위해 변경해야하는 레지스트리 구성 요소의 대체 위치가 있습니다.

찾을 수없는 경우

시작 –> 실행 –> RegEdit–> HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Jet \ 4.0 \ Engines \ Excel

그런 다음 들여다

시작-> 실행-> RegEdit-> HKEY_LOCAL_MACHINE-> SOFTWARE-> Wow6432Node-> Microsoft-> ​​Jet-> 4.0-> 엔진-> Excel


나를 위해이 링크가 도움이되었습니다 : https://support.microsoft.com/en-us/kb/189897

  1. 셀 값이 255자를 초과하는 행을 Excel의 시작 부분에 복사하고 해당 행을 Excel의 첫 번째 행으로 만듭니다.
  2. 위 링크에서 레지스트리 값을 변경하십시오.

참조 URL : https://stackoverflow.com/questions/8629024/text-was-truncated-or-one-or-more-characters-had-no-match-in-the-target-code-pag

반응형