SSIS를 사용하여 가변 레코드 길이 CSV 파일을 가져오는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/89372

문제

SSIS를 통해 가변 레코드 길이 텍스트 파일(CSV)을 SQL Server로 가져올 수 있는 사람이 있습니까?

입력 파일의 레코드 길이가 다양한 SSIS를 사용하여 CSV 파일을 SQL Server 테이블로 가져오려고 여러 번 시도했습니다.이 질문의 경우 두 가지 서로 다른 레코드 길이는 63바이트와 326바이트입니다.모든 레코드 길이는 동일한 326바이트 너비 테이블로 가져옵니다.

가져올 레코드가 1백만 개가 넘습니다.
가져오기 파일 생성을 제어할 수 없습니다.
SSIS를 사용해야 합니다.
MS에 이것이 버그로 보고되었음을 확인했습니다.여러 가지 해결 방법을 시도했습니다.대부분은 레코드를 가로채기 위해 사용자 정의 코드를 작성하려고 시도했지만 원하는 대로 작동할 수 없는 것 같습니다.

도움이 되었습니까?

해결책

비슷한 문제가 있어서 사용자 지정 코드(스크립트 작업)와 데이터 흐름 탭 아래의 스크립트 구성 요소를 사용했습니다.

스크립트 구성 요소에 플랫 파일 소스를 공급하고 있습니다.내부에서는 코드를 사용하여 들어오는 데이터를 조작하고 대상에 맞게 수정합니다.

내 문제는 공급자가 날짜가 없으므로 '000000'을 사용하고 있었고 다른 열에는 패딩/트림 문제가 있다는 것입니다.

다른 팁

이 파일을 가져오는 데 문제가 없을 것입니다.플랫 파일 연결 관리자를 만들 때 확인하세요. 구분됨 형식을 선택한 다음 SSIS 열 길이를 최대 파일 열 길이로 설정하여 모든 데이터를 수용할 수 있도록 합니다.

가변 길이 열이 있기 때문에 CSV 파일에 적합하지 않은 고정 너비 형식을 사용하고 있거나 열 구분 기호를 잘못 설정한 것 같습니다.

같은 문제입니다.제 경우에는 대상 CSV 파일에 파일 본문과 완전히 다른 형식의 머리글 및 바닥글 레코드가 있습니다.머리글/바닥글은 파일 처리의 완전성을 확인하는 데 사용됩니다(날짜/시간, 레코드 수, 총 금액 - 다른 이름의 "체크섬"...).이것은 "메인프레임" 환경의 파일에 대한 일반적인 형식이며 아직 시작하지는 않았지만 머리글/바닥글을 제거하고 나머지를 새 파일로 저장하고 새 파일을 처리하려면 스크립팅을 사용해야 할 것으로 예상됩니다. 파일을 작성한 다음 유효성 검사를 수행합니다.MS가 바로 사용할 수 있다고 기대할 수는 없습니다(하지만 확실히 좋을 것 같지 않습니까?).

C#을 사용하여 스크립트 작업을 작성하여 각 줄을 반복하고 적절한 양의 쉼표를 채워 데이터를 채울 수 있습니다.물론 이는 모든 데이터가 적절한 열과 일치한다고 가정합니다.

즉.각 레코드를 읽으면서 쉼표의 수를 "계산"할 수 있습니다.그런 다음 올바른 쉼표 수가 나올 때까지 레코드 끝에 X개의 쉼표를 추가하세요.

엑셀에서는 CSV로 변환 시 이런 종류의 파일이 생성되는 문제가 있습니다.

이 문제를 "직접" 수행할 수 있는 경우 이 문제를 해결하는 가장 좋은 방법은 Excel에서 파일을 열고 레코드의 "끝"에 열을 만든 다음 다음으로 끝까지 채우는 것입니다. 1s 또는 다른 문자.

불쾌하지만 빠른 해결책이 될 수 있습니다.

이 작업을 수행할 수 없는 경우 위에 설명된 대로 프로그래밍 방식으로 동일한 작업을 수행할 수 있습니다.

테스트 파일로 가져오고 열 구분자를 ","로 설정하고 행 구분자를 CRLF로 설정할 수 없는 이유는 무엇입니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top