2012-06-11 2 views
0

데이터 테이블 비교에 사용되는 새 시스템을 설정하고 있습니다. 어떤 일이 발생합니까 :데이터 테이블과 임시 저장소의 차이 계산

내 소프트웨어는 데이터를 쓰거나 구조를 변경할 수있는 옵션이없는 타사 데이터베이스를 쿼리합니다. 결과는 DataTable입니다. 현재이 데이터 테이블은 동기화 된 다음 XML로 디스크에 저장됩니다. 다음 동기화에서 쿼리는 다시 DataTable을 반환합니다. 그런 다음 디스크에서 저장된 datatable을로드하고 diff를 계산하기 시작합니다 : 새 레코드, 변경된 레코드 및 삭제 된 레코드. diff 레코드 만 동기화되고 저장된 XML은 최신 쿼리로 바뀝니다.

이 작업은 정상적으로 수행되지만 큰 쿼리의 경우 성능이 떨어집니다. 따라서 우리는 대신 SQL Server (2008 이상) 데이터베이스에서 데이터를 전환하고 저장하려고합니다. 이를 위해 우리는 베스트 프랙티스를 찾고 있습니다. 우리가 생각한 한 가지는 레코드에 대한 일종의 해시를 계산하고이를 사용하여 레코드가 변경되었는지 확인하는 것입니다. 시스템은 모든 유형의 DataTable에 대해 일을해야하므로 엄격한 열 구조가 필요하지 않습니다.

SQL Server는 이러한 기능을 지원합니까? 아니면 코드에서 해시를 계산하여 SQL에 저장하는 것이 더 낫습니다. 우리는 전체 기록을 저장할 필요가 없다고 생각했습니다. 새 레코드가 소스 테이블에 있습니다. 수정 된 레코드의 경우 변경 사항을 찾기 위해 해시를 사용하면 충분하며 제거 된 레코드의 경우 대상 시스템의 레코드를 삭제할 수 있도록 레코드의 기본 키를 저장하는 것으로 충분합니다.

답변

0

SQL Server를 사용하면 데이터베이스의 INSERT, UPDATE 및 DELETE 레코드가 쿼리에 트리거를 정의 할 수 있습니다. SQL Server는 항상 업데이트하는 대신 레코드를 삭제 한 다음 다시 삽입합니다. 두 개의 가상 테이블을 트리거 프로 시저에 전달합니다 ("Deleted"및 "Inserted"). 이 둘 사이의 기본 키를 비교하면 어떤 작업이 일어나는지 알 수 있습니다.

트리거를 통과하는 각 기본 키에 대한 레코드를 삽입하는 트랜잭션 기록 테이블을 만드는 것이 좋습니다. 그런 다음 나중에 동기화 프로세스를 실행하여 동기화 된 DataTable에 필요한 레코드를 삭제했다가 다시 삽입하고 트랜잭션 기록을 지 웁니다.

+0

미안하지만, 무슨 뜻인지 실마리가 없습니다. 당신은 아마 어떤 종류의 예가 있습니까? – Jasper