2010-06-24 7 views
5

SSIS를 사용하여 Excel에서 OLEDB SQL 로의 데이터 변환을 수행하고 있습니다. 폴더를 통해 루프를 걸어야하고 각 시트의 데이터를 테이블에 삽입해야하는 시트 세트가 있습니다. 나는 다른 열 구조를 가진 Excel 시트 집합을 반복해야하는 시나리오가 있습니다. foreach 루프 열거자를 통해 각 시트를 통해 루프 할 수 있으며 파일 이름을 찾아서 Excel 소스로 전달합니다.SSIS - 동적 열 매핑

필자의 경우 OLEDB SQL 테이블이 될 대상 구성 요소에서이 열 매핑을 이스케이프 처리하는 방법이 있는지 알고 싶습니다. 이러한 매핑은 각 파일마다 다릅니다. 이 작업을 동적으로 수행 할 수있는 방법이 있습니까?

답변

5

루프 내에서 스크립트 작업을 추가하여 매핑을 수정할 수는 있지만 코드에서 각 매핑을 명시 적으로 만들어야하므로 가장 쉬운 방법은 아닙니다. 더 간단한 해결책은 엑셀 시트를 구분 된 텍스트 파일로 대체하고 대량 삽입 작업을 사용하여 루프 내부로 가져 오는 것입니다. 파일과 테이블에서 열 순서가 동일하면 매핑 정보를 제공 할 필요가 없습니다.

할 수 없다면 매핑 메타 데이터를 어딘가에 저장하는 것이 좋습니다. 데이터베이스의 테이블을 만들고이를 사용하여 스크립트 작업에 동적 매핑을 만듭니다.

약간 더 쉬운 방법은 메타 데이터를 사용하여 SqlBulkCopy 개체를 구성하는 스크립트 작업 하나만 사용하는 것입니다. 전체 데이터 흐름 작업의 유연성을 잃어 버리지 만 임시 파일롯에 일부 파일을로드하는 것이 전부라면 충분합니다. 또한 SqlBulkCopy 개체를 구성하는 것이 데이터 흐름 작업보다 훨씬 쉽습니다.

+0

스크립트 작업을 사용하여 SQLBulkcopy 개체를 구성하는 방법은 무엇입니까? 내가 사용할 수있는 링크가 있습니까? 제발 조금 더 짧게 할 수 있겠습니까 ... 너무 바보가되어서 미안 해요. – Baaju

+3

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopycolumnmapping.aspx에서 SqlBulkCopyColumnMapping 클래스의 문서를보십시오. 사용자 지정 매핑을 사용하는 예제입니다. 원본 판독기 (Excel 용 OleDbDataReader)를 제공하고 대상 연결을 설정하고 원본 및 대상 열의 이름을 사용하여 SqlBulkCopy 개체의 ColumnMappings 속성을 채우는 것만 큼 간단합니다. ColumnMappings 목록을 비워 두어도 대용 삽입 작업의 순서대로 열을 매핑 할 수 있습니다. –