잠재적 인 데이터 손실로 인해 값을 변환 할 수 없음 [닫힘]


12

이것이 중복 된 질문 이 아니며 그 문제에 대한 잠재적 인 중복 이 아님 을 분명히하여 시작하겠습니다 . StackOverflow 및 DBA ​​Stack Exchange에서 이미이 문제가있는 모든 단일 변형에 대한 모든 답변을 운이없이 구현하려고했습니다.

지난 2 일 동안이 문제로 어려움을 겪어 왔으며 (하루 약 7 시간 동안 문제를 해결 함) 인터넷 검색 후에도 다른 사람이 내 문제와 동일한 변형을 가지고 있지 않습니다.

내가 무엇을하려고합니까?

SSIS에서 CSV 파일을 읽고 행을 OLE DB 데이터베이스에 삽입하려고합니다. 이를 위해 아래에서 볼 수있는 것처럼 가장 간단한 설정을 수행했습니다.

  1. Flat File Source -CSV 행을 읽습니다.
  2. Derived Column -현재는 아무것도하지 않습니다 (실험을 위해서만 있습니다).
  3. Data Conversion -현재는 아무것도하지 않습니다 (실험을 위해서만 있습니다).
  4. OLE DB Destination -데이터베이스에 행을 저장합니다.

실행하려고 하면 다음 오류 메시지와 함께 OLE DB 대상 에서 실행이 중지됩니다 .

"OLE DB 대상 입력"(51) 입력에서 "양"(187) 입력 열에 오류가 발생했습니다. 반환 된 열 상태는 "데이터가 손실 될 수 있으므로 값을 변환 할 수 없습니다."입니다.

실패한 열 ( Amount)은 현재 유형 DT_STR입니다. 내가 지금 가장 믿고있는 유형 인 것 같습니다.

내가 무엇을 시도 했습니까?

  • Flat File Connection실패한 열에서 '제안 유형'기능을 사용해 보았습니다 . 이로 인해 Single byte signed int데이터 유형 이 권장되었습니다 .
    • 에서 정지 나의 플랫 파일 소스 .
    • 오류데이터 변환에 실패했습니다. 열 "Amount"에 대한 데이터 변환이 상태 값 2와 상태 텍스트 "데이터 손실 가능성으로 인해 값을 변환 할 수 없습니다."를 리턴했습니다.
  • 을 사용 Derived Column하여 열을에 캐스트했습니다 DT_I4.
    • 에 중지파생 열 .
    • 오류데이터 변환에 실패했습니다. 열 "Amount"에 대한 데이터 변환이 상태 값 2와 상태 텍스트 "데이터 손실 가능성으로 인해 값을 변환 할 수 없습니다."를 리턴했습니다.
  • Data Conversion열을 사용하여 열 값을 캐스팅 하려고 했습니다 DT_I4.
    • 에서 멈 춥니 다Data Conversion .
    • 오류데이터 변환에 실패했습니다. 열 "Amount"에 대한 데이터 변환이 상태 값 2와 상태 텍스트 "데이터 손실 가능성으로 인해 값을 변환 할 수 없습니다."를 리턴했습니다.
  • DT_STR소스와 대상에서 내 값 의 길이를 변경하려고했습니다 .
    • 설정에 따라 소스 또는 대상 에서 정지 합니다.
  • 내가 대신에 엑셀 소스 커넥터를 사용하여 연결 시도했습니다 를 빼고 IMEX=1연결 문자열에 추가됩니다. 불운.

내 프로그래밍 감각은 내가 망했다는 것을 말해줍니다. 나는 그런 단순한 문제에 대해 이렇게 큰 문제를 겪어적이 없다.

왜 데이터의 "잠재적 인"손실을 무시할 수없는 것일까 요? 가장 적게 말하면 정말 실망입니다.

내 시스템

SQL Server 2008이 설치된 Windows Server 2008 R2 시스템입니다. 컴퓨터 자체는 Windows Update를 통해 완전히 업데이트됩니다.


Access에서 가져 오는 경우에도 값 으로이 문제가있는 것으로 보이며 열을 캐스팅 할 때 특정 코드 페이지를 사용해야했습니다. 더 이상 SSIS 패키지에 액세스하여 내가 한 일을 확인할 수 없습니다.

삽입하려는 열의 데이터 유형은 무엇입니까 Amount?
모든 거래의 존

2
CSV 용 플랫 파일 연결 관리자를여십시오. 고급 탭으로 이동하여 Amount열을 선택하십시오 . 스크린 샷을 찍고이 사진으로 질문을 업데이트하십시오.
billinkc

Connection Manager를 아직 볼 기회가 있었습니까?
billinkc

1
나는 당신이 망친다 고 생각하지 않지만 Connection Manager의 정의를 보지 않으면 말할 수 없습니다.
billinkc

답변:


3

이 문제가 몇 번 발생했으며 내보내기 / 가져 오기 매개 변수의 데이터 유형이 일치하지 않습니다. 가장 먼저 할 일은 소스 또는 대상을 마우스 오른쪽 버튼으로 클릭하고 고급 편집기를 선택하여 해당 매개 변수를 확인하는 것입니다. 입력 및 출력 속성으로 이동하여 모든 항목 (외부, 출력 및 입력)에 대한 해당 열의 데이터 유형을 확인하십시오. 나는 보통 여기서 차이를 보았습니다. 종종 하나는 유니 코드 (WSTR)이고 다른 하나는 I4 또는 DSTR입니다.


8

오류 무시

우선, 플랫 파일 소스, 오류 출력으로 이동 한 다음 "잘림"아래의 "실패 구성 요소"를 "오류 무시"로 변경하여 문자열 잘림을 무시할 수 있어야합니다.

더 나은 솔루션

실제 문제는 SSIS 파이프 라인 내부의 문자열 길이가 이전 시점에서 초기화 되었기 때문에 여전히 잘못된 것일 수 있습니다.

플랫 파일 소스에서 녹색 화살표를 두 번 클릭하거나 파생 된 열 / 데이터 변환 후 "메타 데이터"를 선택하면 이러한 경우인지 확인할 수 있습니다. 파이프 라인 내부의 필드 길이를 볼 수 있습니다.

메타 데이터가 더 이상 소스 구성 요소와 더 이상 일치하지 않는 것을 종종 보았을 경우, 주로 플랫 파일 소스 및 해당 마법사를 통해 해당 연결을 작성하는 경우입니다.

파이프 라인 메타 데이터를 소스 구성 요소와 다시 동기화하는 방법을 찾지 못했기 때문에 연결과 플랫 파일 소스를 삭제하고 다시 생성하는 것이 좋습니다.


2
그러나 "잘림"에는 해당되지 않습니다. 나는 이미 그것을 시도했다.
Mathias Lykkegaard Lorenzen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.