2010-01-04 4 views
0

열 집합 (ID- 기본 키 및 이름 varchar)을 포함하는 코드에서 데이터 테이블 comimg가 있습니다. 나는 또한 동일한 (ID- 기본 키 및 이름 varchar) 데이터 형식을 포함하는 내 SQL 테이블이 있습니다. 표에 200000 개가 넘는 행이 있습니다. 나는 sqltable id 열에 datatable (datatable id 열 값이 sqltable id 필드와 일치)이라는 동일한 ID를 포함하는지 비교하려고합니다. 두 id가 같으면 sqltable에서 recoed를 덮어 씁니다.데이터베이스의 값을 고유 한 열로 덮어 씁니다.

비벡 Jagga 찬디 가르

답변

1

내 가정은 데이터 테이블 행을 모두 "추가"의 상태를 가지고, 그래서에 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 클래스는 데이터를 데이터베이스로 대량로드하는 빠른 방법입니다.

관련 문제