내 가정은 데이터 테이블 행을 모두 "추가"의 상태를 가지고, 그래서에 InsertCommand이 실행되는 결과 것입니다.
옵션 1 - ID가있는 레코드가 먼저 존재하는지 여부를 확인하는 저장 프로 시저를 만듭니다. 존재하는 경우 UPDATE를 수행하고 그렇지 않으면 INSERT를 수행하십시오. TRY 블록 내에서 INSERT를 시도 proc 디렉토리에 저장을 만들 -에 InsertCommand
옵션 2 (SQL을 가정 2005 +) 등이 SPROC를 할당합니다. 오류가 PK 제약 에러이면 CATCH 블록 (= 2,627 ERROR_NUMBER() 후는 그 ID를 가진 레코드가 이미 그렇게에 업데이트를 수행 존재하는 것을 의미한다.에 InsertCommand
옵션 3 으로이 SPROC 할당 - 데이터 테이블에있는 모든 데이터를 새 테이블에로드하십시오 (이 경우 SqlBulkCopy 클래스 사용). ID가 이미 존재하는이 테이블에서 실제 테이블의 레코드를 UPDATE 한 다음 삽입하지 않은 실제 테이블에 레코드를 삽입하십시오.
옵션 1은 레코드를 만들기 전에 매번 레코드를 확인하는 오버 헤드가 있으며 이는 전체 활동에 비해 상대적으로 비쌀 수 있습니다.
대다수의 경우 옵션 2가 더 적합합니다. 대부분의 레코드가 NEW (예 : 상당수의 업데이트가있는 경우 PK 오류가 발생합니다.)
옵션 3은 실제로 잘 작동하고 수행 할 수 있습니다. SqlBulkCopy 클래스는 데이터를 데이터베이스로 대량로드하는 빠른 방법입니다.