문자열 변환 문제로 SqlBulkCopy가 실패했습니다.

.net sql sqlbulkcopy

문제

동일한 열을 가진 다른 테이블에 대량로드 할 여러 열을 생성하는 뷰가 있습니다.

이 프로 시저는 SqlDataReader를 반복 할 때마다 잘 작동하며 매번 SqlCommand를 사용하여 SqlParameters를 삽입합니다. 분명히 많은 행 100000에 대해 이것은 너무 느립니다.

SqlBulkCopy를 사용하기로 바꿨습니다. 뷰 열 이름과 대상 db 테이블 열 이름 및 유형이 일치하기 때문에 (위의 절차가 작동했기 때문에!) 작동하는 것처럼 보였습니다.

그러나 첫 번째 레코드에서는 InvalidOperationException이 발생하여 "지정된 String 유형의 값을 지정된 대상 열의 smalldatetime 유형으로 변환 할 수 없습니다"라는 오류가 발생합니다. 이 첫 번째 행에는 날짜 열이 하나만 있으며 그 값은 NULL입니다.

뷰는 열의 하위 집합 만 반환하지만 그렇지 않은 열은 모두 null입니다.

어떤 도움을 주시면 감사하겠습니다.

수락 된 답변

sqlbulkcopy는 동일한 이름을 가진 열 사이를 자동으로 매핑하지 않습니다. select는 대상 테이블에서 열과 동일한 순서로 열을 반환한다고 가정합니다.

따라서 대상 테이블에 7 개의 열이 있고 뷰에서 5를 반환하면 대상 테이블의 처음 5 개 열에 해당 열을 5 개 넣습니다.

SqlBulkCopy 클래스는 열 매핑의 컬렉션을 취할 수 있습니다. 그 트릭을해야합니다.


인기 답변

SET DATEFORMAT 를 연결에 맞게 형식 (ymd, dmy, mdy, ...)으로 설정하고 다시 시도하십시오. 이 오류는 지역화 된 형식이 아닌 현지화되지 않은 형식의 날짜가있는 경우에 주로 발생합니다.

하나의 삽입물에서 모든 작업을 수행하는 경우에는 대량 실행 삽입 작업이 아닌 장기 실행 트랜잭션으로 간주되므로 권장하지 않습니다.



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