DataTable의 SQL CLR SqlBulkCopy

clr sql sqlbulkcopy sqlclr sql-server

문제

우리는 CLR 프로 시저에서 메모리 DataTable을가집니다. 중요한 처리 후에 DataTable에는 데이터베이스의 테이블에로드해야하는 많은 데이터가 있습니다. 아쉽게도 컨텍스트 연결을 사용하기 때문에 SqlBulkCopy가 작동하지 않습니다 (오류 발생 : 컨텍스트 제한 에 대한 컨텍스트 연결 개요 에서 요청한 작업을 사용할 수 없음 ).

추가 정규 연결을 구축하고이를 사용하여 SQLBulkCopy를 수행하려고합니다. 컨텍스트 연결을 통한 일반 연결 을 사용하는 오버 헤드를 고려할 때 이는 다소 어리석은 것처럼 보입니다. 우리는 DataTable의 행을 반복하고 각각에 대한 레코드를 삽입하는 방법에 대해 생각해 봤지만 크기가 커서 SQLBulkCopy가 더 적합하다고 생각합니다.

우리는 DataTable과 결혼하지 않았으며 막대한 양의 데이터를 CLR 프로 시저에서 데이터베이스에 삽입하는 가장 좋은 방법을 찾고 있습니다. DataTable의 마지막 참고 사항은 기본 데이터베이스 테이블을 나타내지 만 DataSet 또는 TableAdapter를 통해 테이블에 연결되지는 않습니다. CLR 절차에서 그렇게하는 방법은 즉시 명백하지 않았습니다. 그렇게하고 AcceptChanges 또는 Update 메서드를 사용하는 것이 허용 가능한 솔루션입니다.

수락 된 답변

나는 SQLBulkCopy가 테이블 크기에 따라 인서트를 수행하는 것보다 10-100 배 빠름을 예상 할 수 있습니다.

의심의 여지가없는 시간과 리소스를 필요로하는 DataTable에서 '중요한 처리'를하고있는 상황에서 컨텍스트 연결 대신 전체 연결을 사용하거나 완전히 새로운 연결을 열 때 약간의 추가 오버 헤드는 지불 할 작은 가격입니다 .



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.