source

텍스트가 잘리거나 하나 이상의 문자가 대상 코드 페이지에 일치하지 않음 Excel 파일에서 가져올 때

manycodes 2023. 5. 11. 21:35
반응형

텍스트가 잘리거나 하나 이상의 문자가 대상 코드 페이지에 일치하지 않음 Excel 파일에서 가져올 때

나는 네 개의 텍스트 열이 있는 엑셀 파일을 가지고 있습니다. 그 중 하나는 값이 가장 긴 ShortDescription이라고 합니다.SQL Server 2008 데이터베이스에 4개의 열이 있는 테이블을 생성했으며 ShortDescription 열 유형이 NvarChar(Max)로 설정되었습니다.

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

열 데이터를 지우려고 했는데 성공했습니다(그래서 문제가 짧은 설명 열에 있는지 확인했습니다).저는 전체 데이터를 다른 우수한 워크북에 복사하려고 했지만 여전히 실패했습니다.

어떤 아이디어라도 ?

SSIS 대화 상자에서 Excel 소스를 사용하여 가져오려고 하는 것 같습니다.

그렇다면 문제는 SSIS가 Excel 소스를 만들 때 스프레드시트 시작 부분에서 일부 행을 샘플링하는 것입니다.[ShortDescription](짧은 설명) 열에 너무 큰 내용이 표시되지 않으면 기본적으로 255자 텍스트 열이 표시됩니다.

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

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

자세한 내용은 다음 두 링크에서 확인할 수 있습니다.

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

구분된 플랫 파일에서 SQL Server로 가져올 때 이 문제가 발생했습니다.해결책은 (오류 메시지에서) 문제가 되는 열의 '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입니다.

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

이 문제를 해결하려면 레지스트리 구성 요소의 대체 위치를 변경해야 합니다.

에서 찾을 수 없는 경우

시작 –>RUN –>RegEdit –>HKEY_LOCAL_MACHINE\소프트웨어\Microsoft\제트\4.0\엔진\엑셀

그럼 들여다 보세요.

시작 –>RUN –>RegEdit –>HKEY_LOCAL_MACHINE -> SOFTWARE -> Wow6432Node -> Microsoft -> Jet -> 4.0 -> 엔진 -> Excel

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

  1. 셀 값이 255자 이상인 행을 엑셀의 시작 부분에 복사하고, 해당 행을 엑셀의 첫 번째 행으로 만듭니다.
  2. 위 링크에서 레지스트리 값을 변경합니다.

사용해 보십시오 - 데이터 흐름 작업으로 이동 > Excel 데이터 원본 마우스 오른쪽 버튼 클릭 > 고급 편집기 표시 > 입력 및 출력 속성 선택 > Excel 원본 출력 확장 > 외부 열 및 출력 열을 확장하고 잘못된 열을 확인한 후 해당 열 머리글을 클릭하고 데이터 유형을 적절히 업데이트하십시오(대부분 업데이트해야 함) 유니코드 텍스트 스트림 [DT_NTEXT], 그렇지 않으면 여기로 변경하여 시도해 보십시오.도움이 되길 바랍니다.

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

반응형