2013-06-04 2 views
0

C에서 테이블에 데이터를 읽고 변환 한 다음 네 개의 다른 테이블에 쓰는 프로그램을 작성했습니다.트랜잭션 내에서 커밋되지 않은 데이터 읽기 (MS SQL Server 2008)

대상 테이블 중 세 개가 마지막 대상 테이블의 기본 키를 가리키는 null이 아닌 정수를가집니다. 나는 이것을 V라고 부른다.

내 프로그램이 메모리에 데이터 덩어리를 읽고 변환했을 때 SqlBulkCopy를 사용하여 V 테이블에 쓴다. 완료되면 select 문을 사용하여 기본 키를 검색한다. .

이러한 기본 키는 메모리의 세 가지 다른 대상 테이블에 올바르게 할당됩니다. 마지막으로 마지막 세 테이블은 한 트랜잭션에서 SqlBulkCopy를 사용하여 데이터베이스에 기록됩니다.

그러나 프로그램이 테이블 V에 성공적으로 쓰지만 다른 세 개의 테이블을 쓰지 못하면 나는 더러운 데이터를 가지고있다.

모든 코드를 둘러싼 거래 내에서 테이블 V에 들어가는 데이터를 주키로 맵핑 할 수 있습니까?

내 문제를 해결하기위한 제안이 있으면 진심으로 기쁘게 생각합니다.

답변

0

테이블 V의 기본 키를 다시 참조하는 세 개의 테이블 열에 외래 키를 놓습니다. 그러면 더티 데이터가 없는지 확인할 수 있습니다. 당신은 당신의 논리와 테이블이 쓰여진 순서를 고쳐야 할 수도 있지만, 외래 키를 추가하는 것은 프로세스를 정리하고 리팩토링 후에 더 부드럽게 작동하도록해야합니다.

+0

그게 내가하려는 일입니다. 그래서 V 테이블에서 기본 키를 읽어야하므로 다른 테이블에 기본 키를 제공 할 수 있습니다. 제 문제는 거래에서 이렇게하는 것입니다. – rlp

+1

단일 트랜잭션에서 모든 쓰기를 수행하지 못하게하는 요인은 무엇입니까? 외래 키를 사용하는 경우 초기 쓰기 집합을 수행하고 두 번째 집합을 시도 할 수 있어야하며 원래 테이블 값이 기록되지 않은 경우 두 번째 집합의 쓰기 시도가 실패한 행에서 실패해야합니다. 기본 키 위반. – Narthring

+0

데이터베이스에 테이블 V를 작성한 후에 관계를 만들어야합니다. 그런 다음에 만 테이블 V의 기본 키를 알고 이들을 알면 V, 테이블 T, Q 및 W 테이블을 연관시킬 수 있습니다. 1) V에 (데이터베이스에) 쓰기 2) 읽기 기본 키가 V 3) T, Q 및 W에 외래 키 쓰기 (메모리에 있음) 4) T, Q 및 W에 쓰기 (데이터베이스에 있음) (1) 완료하지만 (4)가있는 시나리오는 걱정됩니다. 아니. 관심을 가져 주셔서 감사합니다. – rlp

관련 문제