programing

SSIS Excel 가져오기 강제 적용 잘못된 열 유형

testmans 2023. 5. 10. 20:32
반응형

SSIS Excel 가져오기 강제 적용 잘못된 열 유형

SSIS를 사용하여 스프레드시트를 데이터베이스로 가져오려고 합니다.어떤 이유에서인지 SSIS는 두 개의 열에 문자 데이터가 포함되어 있는 경우 두 개의 열이 이중 유형이라고 믿으려고 합니다.열을 nvarchar(255)로 다시 매핑하려고 했지만 여전히 이중으로 생각되는 데이터를 선택하지 않습니다. 문자가 있기 때문입니다.SSIS 패키지를 편집하고 Excel 소스에서 열 유형을 변경하려고 하면 오류 출력에서 열 유형을 변경할 수 없고 일반 출력과 오류 출력 열이 일치하지 않으면 오류가 발생합니다.

SSIS는 왜 이 열들이 이중이라고 주장합니까?어떻게 하면 이것들이 줄이라는 것을 깨닫게 할 수 있습니까?마이크로소프트의 모든 것이 제대로 작동하지 않는 이유는 무엇입니까?

편집:

다음을 찾았습니다.

혼합 데이터 유형이 맨 위에 오도록 데이터를 정렬하여 다음과 같이 추측했습니다.문제가 역전되었습니다.문자 데이터를 가져오지 않는 대신 순수 숫자 데이터 가져오기를 중지했습니다.누군가 12345가 문자열로 표현될 수 없다고 생각하는 것 같습니다

이 문제는 전에도 본 적이 있는데, SSIS가 아닌 엑셀 문제입니다.Excel은 처음 몇 개 행을 샘플링한 다음 데이터 유형을 텍스트로 명시적으로 설정하더라도 추론합니다.이것을 SSIS 패키지의 Excel 파일 연결 문자열에 넣어야 합니다.이 지침은 Excel에 열에 혼합된 데이터 유형이 포함되어 있음을 알려 주며 실제로 열이 숫자 유형이 아님을 확인하기 전에 추가 검사를 수행하도록 힌트를 줍니다.

;Extended Properties="IMEX=1"

대부분의 경우 이것과 함께 작동해야 합니다.탭으로 구분된 텍스트로 Excel 데이터를 내보내고 SSIS를 사용하여 가져오는 것이 더 안전합니다.

변환할 수 있습니다.force) 열 데이터를 텍스트로...사용해 보십시오(참고:이 지침은 Excel 2007을 기반으로 합니다.

다음 단계에 따라 Excel은 열을 텍스트로 처리해야 합니다.

Excel을 사용하여 스프레드시트를 엽니다.

열 머리글을 클릭하여 "대부분 숫자 데이터"가 들어 있는 전체 열을 선택합니다.

리본 메뉴에서 Data(데이터) 탭을 클릭합니다.

텍스트를 열로를 선택합니다.텍스트를 열로 변환 마법사가 나타납니다.

-1단계: 다음 클릭

- 2단계: 다음 클릭

-3단계: 텍스트를 선택하고 마침을 클릭합니다.

Excel 시트를 저장합니다.

SQL Server 2005 데이터 가져오기 마법사를 사용하여 가져오기를 다시 시도합니다.

또한 다음은 추가 답변이 있는 다른 질문에 대한 링크입니다.

데이터 가져오기 마법사가 열에 대해 선택한 데이터 유형을 좋아하지 않음

승인된 답변에서 언급되지 않은 한 가지 사항은 "IMEX=1" 매개 변수가 다음의 인용 부분 에 들어가야 한다는 것입니다.

...;Extended Properties="...";

;IMEX=1; 항상 작동하는 것은 아닙니다...Excel의 혼합 데이터 유형에 대한 모든 것: Excel 열의 혼합 데이터 유형

여기에 이미지 설명 입력

또 다른 해결 방법은 문자 데이터가 맨 위에 있는 스프레드시트를 정렬하여 Excel이 열을 문자열로 보고 모든 항목을 가져오는 것입니다.

레지스트리를 변경하여 처음 8개 행보다 더 많은 값을 볼 수도 있습니다.저는 이 방법을 사용했고 꽤 잘 작동합니다.

http://support.microsoft.com/kb/281517

IMEX=1은 저에게 적합하지 않았습니다.레이니어 부이센의 제안도 마찬가지였습니다. (차이가 있는지는 모르겠지만 SQL Server 2008r2를 사용하고 있습니다.)몇 가지 해결 방법과 IMEX=1이 각 스프레드시트의 처음 8행으로 제한되는 이유에 대한 몇 가지 설명은 http://social.msdn.microsoft.com/Forums/en-US/sqlintegrationservices/thread/78b87712-8ffe-4c72-914b-f1c031ba6c75 에서 확인할 수 있습니다.

이것이 도움이 되길 바랍니다.

저는 다음과 같은 레시피를 사용했습니다.

  1. Excel에서 액세스로 데이터 가져오기
  2. 액세스에서 SQL 서버로 데이터 가져오기

그리고 그것은 나에게 효과가 있었습니다.

저는 이 문제로 한동안 벽에 머리를 부딪치고 있었습니다.우리 환경에서는 공급업체의 가격 파일을 다양한 형식으로 사용하고 있으며, 그 중 일부는 백만 개 이상의 레코드를 가지고 있습니다.이 문제는 일반적으로 다음과 같은 경우에 발생합니다.

  • OLEDB 드라이버에 의해 스캔된 행은 숫자를 포함하는 것으로 보이지만 나중에 레코드 세트에 혼합된 값을 포함합니다.
  • 필드에는 숫자만 포함되지만 원본에는 텍스트 형식의 일부(일반적으로 Excel 파일)가 있습니다.

문제는 외부 입력 열을 원하는 데이터 유형으로 설정하더라도 패키지를 실행할 때마다 파일이 스캔되고 OLEDB 드라이버가 필드가 되어야 한다고 생각하는 대로 동적으로 변경된다는 것입니다.

소스 파일에는 일반적으로 필드 헤더(텍스트)와 가격(숫자 필드)이 포함되어 있으므로 다음과 같은 간단한 솔루션을 제공합니다.

첫 번째 단계:

  • 헤더 필드를 포함하도록 SQL 문을 변경합니다.이렇게 하면 SSIS는 가격 필드를 포함한 모든 필드를 텍스트로 볼 수 있습니다.

혼합 필드의 경우:

  • 필드가 이제 텍스트이기 때문에 초기 문제는 해결되었지만 출력에 헤더 행이 남아 있습니다.
  • SQL WHERE 절을 변경하여 "WHERE NOT([F4]='Price' 등의 헤더 값을 제외하여 헤더 행이 출력되지 않도록 합니다."

숫자 필드의 경우:

  • OLE DB 원본에 대한 고급 편집기를 사용하여 가격 필드(또는 다른 숫자 필드)의 출력 열을 숫자 데이터 유형으로 설정합니다.이렇게 하면 헤더 레코드를 포함하여 이러한 필드에 텍스트가 포함된 모든 레코드가 실패하지만 텍스트로 저장된 숫자 값은 강제로 변환됩니다.

  • 숫자 필드의 오류를 무시하도록 오류 출력을 설정합니다.

  • 또는 리디렉션된 숫자 필드에 오류가 여전히 필요한 경우 SQL WHERE 절을 변경하여 헤더 행을 제거합니다.

  • 이 필드의 오류를 리디렉션하도록 오류 출력을 설정합니다.

분명히 이 방법은 머리글 필드가 있는 곳에서만 사용할 수 있습니다. 하지만 이것이 여러분 중 일부에게 도움이 되기를 바랍니다.

저는 오늘 당신의 질문을 보았습니다. 저는 같은 문제를 겪고 있었고 EASIET 방법이 97-2003 형식으로 엑셀 시트를 저장하고 가져오기는 당신이 지정한 것과 동일한 데이터 유형의 열을 유지한다는 것을 알았습니다.이것이 도움이 되길 바랍니다!

옵션 1.Visual Basic을 사용하여 각 열을 반복하고 각 열의 형식을 텍스트로 지정합니다.

텍스트-열 메뉴를 사용하고 구분을 변경하지 않고 "일반"을 "텍스트"로 변경합니다.

저도 같은 문제가 있었습니다.문제는 Excel 소스 태스크에 있습니다.이 작업을 처음 설정할 때 작업은 지정된 Excel 파일(Excel 연결을 통해)에 연결하고 현재 스프레드시트를 기준으로 각 열의 유형을 결정합니다.

따라서 Excel Source 작업을 설정할 경우 텍스트여야 하는 열에 텍스트만 있는지 확인하십시오.즉, Excel 원본 태스크는 항상 후속 스프레드시트의 형식이 동일하다고 가정하고 태스크를 설정할 때 열이 텍스트였기 때문에 12345를 텍스트로 읽습니다.

그것이 말이 되기를 바랍니다!

동일한 문제가 있었습니다. 단일 열에 여러 개의 데이터 유형 값이 있고, 숫자 값만 패키지 로드됩니다.모든 업데이트를 null로 유지합니다.

해결책

이 문제를 해결하려면 Excel 데이터 유형을 변경하는 것이 해결책 중 하나입니다.Excel에서 열 데이터를 복사하고 다른 파일에 붙여넣습니다.해당 열을 삭제하고 을 텍스트 데이터 유형으로 삽입한 후 복사한 데이터를 새 열에 붙여넣습니다.

now insis 패키지 삭제 후 Excel 소스 및 대상 테이블을 다시 생성하면 열 데이터 유형이 varchar로 변경됩니다.

이것은 효과가 있을 거예요.

Excel 스프레드시트에 같은 이름의 열이 여러 개 있는 경우 이러한 오류가 발생합니다.열 이름을 구분한 후 패키지가 작동합니다.열 이름을 확인하는 동안 숨겨진 열이 무시되는 경우가 있습니다.

  1. 리본 메뉴에서 파일을 클릭한 다음 옵션을 클릭합니다.
  2. 고급을 클릭한 다음 이 워크북을 계산할 때에서 표시된 대로 정밀도 설정 확인란을 선택한 다음 확인을 클릭합니다.

  3. 확인을 클릭합니다.

  4. 워크시트에서 형식을 지정할 셀을 선택합니다.

  5. 홈 탭에서 번호 옆에 있는 대화 상자 시작 단추 이미지를 클릭합니다.

  6. 범주 상자에서 번호를 클릭합니다.

  7. 소수 자릿수 상자에 표시할 소수 자릿수를 입력합니다.

이것은 저에게 효과가 있었습니다.Excel에서 문제가 있는 열을 선택하고 전체 열을 강조 표시합니다.형식을 "텍스트"로 변경합니다.Excel 파일을 저장합니다.

SSIS 패키지에서 가져올 데이터 흐름 창으로 이동합니다.Excel Source 노드를 두 번 클릭합니다.유형이 변경되었음을 경고하고 다시 매핑할지 여부를 묻는 메시지가 표시됩니다.예를 클릭합니다.이제 실행이 작동하고 모든 값을 가져옵니다.

참고: Excel 2013 및 Visual Studio 2015를 사용하고 있지만 이전 버전에서도 이러한 지침이 적용될 것으로 예상됩니다.

제 패키지의 오류 원인을 깨닫는 데 시간이 좀 걸렸습니다.null(로 변환된 했습니다.Example: from "06" to "NULL" 파일 ()를.Excel Source> Edit> Connection Manager> Sheet='MySheet'> Preview...을 확장 때 했습니다. :) 연 의 문 결 확 James 게 흥 했 습 분 니 다 때 을 었 읽 을 물 시 위 해 기 하 자 편 열 장 을 집 된 속 성 으 로 ▁). ▁when ▁excited ▁james ▁i 다 니 ▁) ▁got ▁i ▁edit ▁proper 습 ▁the ▁by 했 ▁to ▁post ▁the ties ;Extended Properties="IMEX=1"하지만 그것은 저에게 효과가 없었습니다.

엑셀 워크시트의 셀 형식을 "숫자"에서 "텍스트"로 변경하여 오류를 해결할 수 있었습니다.형식을 변경한 후 업로드 프로세스가 성공적으로 실행되었습니다!내 연결 문자열은 다음과 같습니다.Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\myServer\d$\Folder1\Folder2\myFile.xlsx;Extended Properties="EXCEL 12.0 XML;HDR=NO";

다음은 오류 메시지를 해결한 몇 가지 스크린샷입니다.

오류: Excel 파일 연결의 메타데이터

오류 원본: "일반" 형식

오류 원본이 변경됨: "텍스트" 형식

오류 수정:Excel 파일 연결 메타데이터

언급URL : https://stackoverflow.com/questions/542497/ssis-excel-import-forcing-incorrect-column-type

반응형