2014-01-14 1 views
3

내 응용 프로그램에서 100 개가 넘는 다른 테이블에 대해 (때로는 10000 이상) 업데이트 명령을 실행하는 프로세스를 실행하고 있습니다. 엔티티 프레임 워크를 사용하여 엔티티를 업데이트 한 다음 13000 개의 레코드를 업데이트하고 커다란 업데이트 일괄 처리 후에 saveChanges()를 호출하여 40+ 분의 순서로 엄청나게 느리게 업데이트 할 수 있습니다.여러 테이블에 대한 일반 일괄 업데이트

모든 테이블을 업데이트 할 때 임시 테이블이 필요하고 저장 프로 시저가 실행 가능하지 않으므로 병합 명령이 작동하지 않습니다. 그래서 UpdateCommand를보고 데이터 테이블을 전달하기 시작했습니다. 두 가지 문제가 있습니다. 첫 번째는 이것입니다.

da.UpdateCommand.Parameters.Add("@YourField", SqlDbType.SmallDateTime).SourceColumn = "YourField" 

대상의 dbtype을 일반적으로 결정할 방법이 없습니다. 그렇다면 열을 업데이트 매개 변수에 매핑하는 방법은 무엇입니까? 둘째로, 나는 업 서이트하고 싶지 않습니다. 단지 업데이트하고 싶습니다. 일치하는 레코드가 없으면 그냥 무시하고 계속 진행하십시오. 나는

da.ContinueUpdateOnError = False 

를 사용하여 실패에 업데이트 일을 계속 할 수 있습니다 알고 있지만 찾을 수 없습니다 기록에 삽입하는 것을 방지 할 수있는 방법을 찾을 수가 기운 다. 어떤 도움이라도 대단히 감사합니다. 고맙습니다!

+1

이 프로세스를 서버 측에서만 수행 할 수 있습니까? 프로세스가 세분화되어 프론트 엔드로 전송되어 이후에 백엔드로 반환되는 것처럼 불필요한 것처럼 들리는 방식으로 설명됩니다. 난 그냥 네트워크 여행과 신중한 거래의 관점에서 생각하고 있어요. – OraNob

+0

특히 그렇지 않습니다. 기본적으로 로컬 데이터베이스와 서버 데이터베이스라는 두 개의 데이터베이스가 있습니다. 로컬 컴퓨터는 업데이트와 같은 모든 경우에만 자주 동기화되며 신뢰할 수없는 인터넷 때문에 동기화가 완료 될 때까지 한 두 달 정도 걸릴 수 있습니다.하지만 페이로드는 대개 거대합니다. – user3170736

+0

로컬 및 서버 DB에 어떤 DBMS를 사용하고 있습니까? 복제로 할 수있는 일이있을 수 있습니다 ... –

답변

0

SQL 복제가 옵션이 아니면 SQL Data Compare Command Line tool을 사용할 수 있습니다. 한쪽에 만 존재하는 행을 무시하고 양면에있는 행만 동기화 (업데이트) 할 수 있습니다. 프로세스를 검토하거나 명령 줄 유틸리티가 자동으로 실행되도록 예약하려면 GUI를 사용하십시오.

관련 문제