클라이언트 / 부모 관계에 대한 SQL 대량 복사

.net sqlbulkcopy sql-server

문제

수백만 행의 클라이언트 / 상위 관계가있는 .NET 응용 프로그램에 2 개의 DataTable이 있습니다. 이 데이터는 SQL BulkCopy를 통해 SQL Server 데이터베이스에 삽입되어야합니다. 이 .NET 응용 프로그램의 여러 인스턴스가 같은 테이블에 다른 데이터를 병렬로 실행하는 것이 가능합니다.

기본 키의 자동 생성 부모 테이블에 ID 열이 있습니다.

문제는 해당 외래 키를 자식 테이블에 삽입하는 방법을 모른다는 것입니다.

아무도 벌크 복사를 사용하여이 1 : N 관계 문제를 해결하는 방법을 알고 있습니까? 여러 인스턴스가 실행될 수 있으므로 .NET에서 ID를 만들 수 없습니다.

Daniel 감사합니다.

수락 된 답변

이것은 IDENTITY 이상의 자연 키를 모든 기본 키에 사용하는 것이 더 좋은 이유 중 하나 일뿐입니다.

어떤 아이들이 데이터 소스에서 어느 부모에게 갈 것인지 어떻게 알 수 있습니까? 그것들이 거기에 기둥으로 연결되어 있다면 너무 어렵지 않아야합니다. 상위 행을 삽입하고 하위 행을 스테이징 테이블에 삽입 한 다음 해당 열의 상위에 합류하는 동안 하위 행을 삽입하여 ID를 가져옵니다.

관계가 단순히 파일 내의 상대적인 위치 또는 그와 비슷한 것일 경우에는 더 어려워집니다. 파일 줄 #을 포함시킨 다음 위의 동일한 단계를 사용하여 합치면됩니다 (child.line_num> parent.line_num 및 다른 두 parent.line_num이없는 경우). 또는 한 번에 하나씩 부모를 가져올 수 있습니다. 루프를 만들고 ID를 캡처 한 다음 해당 ID를 사용하여 모든 자식을 삽입합니다. 이 문제는 SSIS에서 너무 많은 문제없이 설정할 수 있지만 느려질 수 있습니다.

귀하의 문제 (데이터 소스 등)에 대한 자세한 내용을 통해 더 자세한 내용을 제공 할 수 있습니다.


인기 답변

당신의 데이터가 어디에 있는지 확실하지 않지만 이것이 내가 어떻게 접근 할 것인가이다.

  1. 하나 이상의 중간 중간 파일을 사용하십시오.
  2. 데이터를 평평하게하고 기본 키를 할당하십시오.
  3. 상위 테이블에 identity insert 사용 (자동 증가 건너 뛰기를 의미)
  4. 대량 복사 대신 SSIS를 사용하여 데이터베이스를로드하십시오.


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