SQLBulkCopy 실패시 데이터를 업로드합니까?

c# sql sqlbulkcopy sql-server

문제

나는 엑셀 스프레드 시트에서 임시 테이블로, 그리고 임시 테이블에서 프로덕션 데이터베이스로 데이터의 SQL 대량 복사를하고있다.

어떤 이유로 업로드가 임시 테이블이나 프로덕션 데이터베이스로 실패하면 트랜잭션이 롤백되고 데이터가 가져 오거나 기존 데이터를 가져 오지 못하게됩니까?

수락 된 답변

기본적으로 SqlBulkCopy 는 완료 한 마지막 배치로 롤백합니다. BatchSize 가 0 (기본값)이면 모든 일괄 처리가 수행되지만 일괄 업로드가 너무 오래 걸리면 (기본 30 초) 시간 초과 가 발생할 수 있습니다.

또 다른 옵션은 전체 트랜잭션을 외부 트랜잭션으로 랩핑하여 생성자 에 전달하는 것입니다. 이렇게하면 마지막 배치 대신 오류가 발생하여 전체 삽입 작업이 롤백됩니다. 이렇게하면 더 작은 배치를 사용할 수 있지만 전체 삽입을 단일 트랜잭션으로 유지할 수 있습니다. 또한 임시 처리 테이블에서 라이브 데이터로 데이터를 이동하는 데 동일한 트랜잭션을 사용할 수 있습니다.

다음은 MSDN에서 가져온 스 니핏입니다.

using (SqlConnection destinationConnection = new SqlConnection(connectionString))
{
    destinationConnection.Open();

    using (SqlTransaction transaction = destinationConnection.BeginTransaction())
    {
        using (SqlBulkCopy bulkCopy = new SqlBulkCopy(
                   destinationConnection, SqlBulkCopyOptions.KeepIdentity,
                   transaction))
        {
            bulkCopy.BatchSize = 10;
            bulkCopy.DestinationTableName = "dbo.BulkCopyDemoMatchingColumns";

            // Write from the source to the destination. 
            // This should fail with a duplicate key error. 
            try
            {
                bulkCopy.WriteToServer(reader);
                transaction.Commit();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                transaction.Rollback();
            }
            finally
            {
                reader.Close();
            }
        }
    }
}


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