참조가있는 여러 테이블에 대해 SQLBulkCopy 사용

c# sqlbulkcopy sql-server

문제

많은 양의 JSON 데이터를 소비하고 SQLBulkCopy 클래스를 통해 SQL Server 데이터베이스에 저장하고 있습니다.

SqlBulkCopy bulkInsert = new SqlBulkCopy(conn);
bulkInsert.DestinationTableName = "dbo.Orders";
conn.Open();
bulkInsert.WriteToServer(rows.ToArray());

rows는 DataRow 형식의 목록입니다.

내가 소비하는 데이터는 주문이므로 대량의 데이터가 orders 테이블에 삽입되지만 일부 다른 테이블도 삽입해야하지만 이러한 삽입에는 orders 테이블에 삽입 된 행에 대한 참조가 있어야합니다.

SQLBulkCopy를 사용하여이 작업을 수행 할 수 있습니까? 아니면 수동으로 각 행을 삽입하고 참조 행을 가져온 다음 나중에 삽입 할 때 해당 값을 사용하기 위해 삽입 행에 대한 데이터베이스를 쿼리해야합니까?

전문가 답변

SqlBulkCopy는 삽입 된 ID 값을 반환 할 수 없습니다.

따라서 SqlBulkCopy 만 사용하는 것은 불가능하지만 임시 테이블을 사용하여 일부 트릭을 사용하여 수행 할 수 있습니다.

간단히 말해서 :

  • 임시 테이블에 대량 삽입
  • OUTPUT 절을 사용하여 임시 테이블에서 대상으로 삽입 (ID 값을 얻으려면)
  • OUTPUT 절에서 반환 된 ID 값을 모든 행에 설정합니다.

면책 조항 : 저는 Bulk Operations 프로젝트의 소유자입니다.

이 프로젝트는 다음과 같은 기능을 추가하여 SqlBulkCopy 제한을 극복합니다.

  • 신원 값 출력하기
  • 대량 삽입
  • 대량 업데이트
  • 벌크 삭제
  • 대량 병합

예:

var bulk = new BulkOperation(connection)
bulk.DestinationTableName = "dbo.Orders";

bulk.ColumnMappings.Add("OrderId", ColumnMappingDirectionType.Output);
bulk.ColumnMappings.Add("Price");
bulk.ColumnMappings.Add("Quantity");

bulk.BulkInsert(rows);


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