2014-11-06 2 views
0

SQL Server 2014의 변경 내용 추적 기능을 사용하여 응용 프로그램의 내부 상태를 데이터베이스와 동기화하지만 예기치 않은 동작이 발생했습니다. SQL Server ChangeTable은 아직 존재하지 않는 삽입 된 행을 반환합니다.

나의 현재 저장 프로 시저

가 여기 MSDN 예제를 기반으로합니다 일어날 것으로 보인다 무엇 http://msdn.microsoft.com/en-us/library/bb933874.aspx

가 SYS_CHANGE_OPERATION 인 것은이 '나'없는 기본 키 삽입을 위해하지만 실제 테이블과 조인 경우에는이입니다 데이터가 아직 있음 - 변경 테이블의 기본 키가 설정되지만 테이블 자체 및 다른 모든 열의 기본 키는 null입니다.

이것은 가능하지 않다고 생각되는 상황에서 응용 프로그램 측면에서 약간의 구문 분석 오류가 발생합니까? 데이터가 아직 삽입되지 않았다면 삽입을보고해서는 안됩니다.

내 트랜잭션 격리 수준은 MSDN에서 권장하는대로 스냅 숏 격리 및 읽기 커밋 된 스냅 숏을 사용하여 커밋 된 것으로 읽습니다.

답변

1

변경 추적에서는 문제가 아니지만 다른 테이블과 내부 조인을 수행 한 다음 변경 테이블에 대해 외부 조인을 수행 한 결과입니다.

이 경우 내부 조인은 행 (다른 테이블의 외래 키 누락)을 반환하고 변경 테이블을 포함한 외부 조인은 '빈'삽입 (모든 테이블 열을 제외하고는 테이블 열을 제외하고는 null)이됩니다. 질문. 추가하지만 그대로

이 솔루션은 쿼리를 떠나 있었다 추가 곳 제약 :

WHERE MY.PrimaryKey IS NOT NULL OR CT.SYS_CHANGE_OPERATION = 'D' 

이 삽입 또는 업데이트가 발생하여 응용 프로그램이의 내성을 가정 할 때 기본 키가 null가 아닌 보장 업데이트는 본질적으로 삽입을 필터링하고 내부 조인이 성공한 후속 업데이트를 기다리는 동안 이전 삽입이 발생하지 않은 위치를 업데이트합니다.

관련 문제