같은 테이블에있는 DML 트랜잭션의 중간에 ALTER TABLE (DDL)을 사용할 수 있습니까?

c# ddl dml sqlbulkcopy sqltransaction

문제

말하자면, C #에서 DataTable의 데이터를 SQL 테이블에 삽입하는 SqlTransaction을 시작합니다. 그러나이 데이터는 많은 데이터이므로 SQL 트랜잭션 내에서 SqlBulkCopy로 '청크 (chunk)'로 처리합니다. 모든 청크가 성공적으로 복사되면 트랜잭션.

이제는 삽입되는 값의 길이가 대상 테이블의 최대 열 크기를 초과하므로 SqlBulkCopy가 특정 '청크'의 해당 지점에서 실패하게됩니다. 이 예외를 잡아서 대상 열의 최대 길이를 늘리기 위해 테이블 ​​/ 열을 변경 한 다음 SqlBulkCopy'ing 데이터를 가져 와서 다음 '청크'를 가져와 계속 복사 할 수 있습니까 (아니면 좋습니다). 시작한 '삽입 거래'를 커밋하셨습니까?

DML 트랜잭션을 시작하고, 커밋되지 않은 트랜잭션 중간에서 멈추고, DDL을 수행하여 대상 테이블을 변경 한 다음 원본 DML을 완료하고 커밋 할 수 있습니까?

인기 답변

귀하의 질문에 대답하기 위해, 삽입 문 사이의 테이블을 수정할 수 있습니다. 트랜잭션을 각 배치로 범위를 지정하면 열 길이를 업데이트하기 위해 일괄 처리 만 롤백하면됩니다. 이 방법은 데이터 삽입을 시작하기 전에 열 길이를 설정하는 것보다 더 많은 오버 헤드가 있습니다.

좋은 방법은 원본 데이터의 각 열을 최대 길이로 확인한 다음 데이터 가져 오기를 시작하기 전에 대상 열을 새 열 길이로 업데이트하는 것입니다. 그렇게하면 대상 데이터베이스가 제공 될 모든 데이터를 받아 들일 수 있습니다.



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