본문 바로가기

NET/C#

SQLBULKCOPY

SQLBULKCOPY : 대용량 데이터를 INSERT 구문으로 처리하는것보다 효율적으로 입력가능합니다.

단 SqlDateTime 형식의 DataTable 열을 SQL Server 2008에 추가된 날짜/시간 형식 중 하나의 형식을 가진 SQL Server 열에 대량 로드할 경우 SqlBulkCopy가 실패합니다.


필요한 속성 

BatchSize : 각 일괄 작업에 포함된 행의 수입니다. 각 일괄 작업이 끝나면 해당 일괄 작업에 포함된 행이 서버로 전송됩니다.

DestinationTableName : 서버에 있는 대상 테이블의 이름입니다.

DestinationTableName의 이름은 세 부분으로 구성됩니다(예: <database>.<owningschema>.<name>). 선택한 데이터베이스와 소유하는 스키마로 테이블 이름을 정규화할 수 있습니다. 그러나 테이블 이름에 밑줄("_")이나 다른 특수 문자를 사용할 경우에는 ([<database>.<owningschema>.<name_01>])과 같이 괄호를 사용하여 이름을 이스케이프해야 합니다. 자세한 내용은 SQL Server 온라인 설명서에서 "식별자"를 참조하십시오.

DestinationTableName 속성의 값(예: tempdb..#table 또는 tempdb.<owner>.#table)을 사용하여 데이터를 임시 테이블로 대량 복사할 수 있습니다.


ColumnMappings :  SqlBulkCopyColumnMapping 항목의 컬렉션을 반환합니다. 열 매핑은 데이터 소스 열과 대상 열 사이의 관계를 정의합니다.

데이터 소스와 대상 테이블의 열 수가 같고 데이터 소스 내에서 각 소스 열의 위치가 해당하는 대상 열의 위치와 일치하면 ColumnMappings 컬렉션이 필요하지 않습니다. 하지만 열 수가 다르거나 위치가 일치하지 않는 경우에는ColumnMappings를 사용해야만 데이터를 올바른 열로 복사할 수 있습니다.





참고 http://debop.egloos.com/2298205 , http://msdn.microsoft.com/ko-kr/library/30c3y597.aspx