데이터 유효성 검사가 포함 된 대량 삽입

bulkinsert sqlbulkcopy sql-server

문제

테이블에 많은 레코드 (약 2 ~ 3 백만)를 삽입해야한다는 요구 사항이 있습니다. 그러나 우리는 유효하지 않은 레코드 (기본 키, 외래 키 및 비 null 위반)를 나중에 참조 할 수 있도록 별도의 오류 테이블에 유효성을 검사하고 분리 할 수 ​​있어야합니다. 필자의 연구에 따르면 SQL 서버의 대량 삽입은 삽입에 적합하지만 잘못된 데이터 레코드를 필터링하는 가장 좋은 방법을 찾아 내지 못합니다. 도움 사이에 스테이징 테이블을 가지고 있습니까? 스테이징 테이블에 대해 대기열을 사용하여 위반 사항을 확인할 수는 있지만 실제 레코드에 다른 레코드를 삽입해야합니다 (삽입 선택 또는 병합을 통해). 그러나 이것이 효율적인 접근 방법입니까? 나는 2x 인서트를하는 것과 비슷하기 때문에 걱정이된다.

대량 삽입 작업을 위해 .net sqlbulkcopy를 사용할 계획이며 명확한 오류보고 기능도 없습니다.

좀 더 효율적인 솔루션을 누군가에게 알려줄 수 있습니까?

편집 :이 방법은 유일한 해결책입니다, 당신은 두 번째 삽입에 가장 적합한 방법이라고 생각합니까? 삽입 ... 선택 또는 병합입니까? BULK INSERT의 효율성과 속도와 일치합니까? 아니면 다른 대안이 있습니까?

감사!

인기 답변

개인적으로 나는 2 / 3M 레코드를 많은 양으로 생각하지 않을 것입니다. 몇 초 내에 데이터가 필요하지 않으면 Single (Non-Bulk) 인서트가 적절하게 작동합니다.

src 데이터 품질에 신경이 쓰이는 경우 stg 테이블에 먼저로드 한 다음 "Soft RI"를 수행합니다. SQL을 사용하여 PK, UQ, FK 등을 확인합니다. 숫자 / 비 숫자 또는 나쁜 날짜 형식 문제가 걱정된다면 모든 열에 대해 Stg 테이블 VARCHAR (8000)을 만들고 테이블에서 읽을 때 TRY_CONVERT를 사용합니다.

STG에 데이터를 저장 한 후에는 올바른 행만 필터링하고 불량 행을 자세히보고 할 수 있습니다.



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