0

기본적으로 계층 적 데이터가 포함 된 테이블이 있습니다.입력 된 데이터 집합 ConstraintException 삽입시

그래서 각 아이의 부모에 대한 id 열을 가리키는 롤업 열과 id 열이 있습니다.

이 테이블은 TableAdapter가에 GetData의()는 다음 테이블의 기본 키 autoincrementseed를 사용하여 설정 사용하여 데이터베이스에서로드 :

SELECT IDENT_CURRENT에게 ('TABLENAME')를 + 1

새로운 하위 클래스가 만들어지면 동일한 TableAdapter에서 Update()를 호출합니다.

대개 이것은 완벽하게 작동하지만 때때로 ContraintException 열을 가져옵니다. 'id'는 고유 한 문제로 제한되며 새로운 행이 추가 될 때만 발생하는 것처럼 보입니다.

일반적으로 autoincrementseed 및 autoincrementstep을 -1로 설정하면 ID 열을 업데이트 한 후 데이터베이스에서 올바른 값을 얻을 수 있지만 롤업 열은 기본 키 값에 따라 달라 지므로이 값이 작동하지 않습니다.

모든 변경 사항은 전체적으로 사용자가 데이터베이스에 적용하기 전에 검토해야하기 때문에 새로운 행을 모두 적용 할 수 없습니다.

아이디어가 있으십니까?

편집 : 다른 소스에서이 테이블로 다른 변경 사항이 제공되지 않으므로 여기에 동시성 문제가 없음을 언급해야합니다.

다른 수정 : 오늘은 update 메소드가 호출되기 전에 테이블의 값을 검사하여 문제가 기본 키에서 올바르게 정렬되지 않은 새 행과 관련되어 있음을 확인했습니다.

예를 들어 행은 960,961,963,962이며, 962가 삽입되면 962가 이미 존재한다는 오류가 발생합니다. 이 업데이트가 행을 삽입하지 않았 으면 업데이트가 삽입 되었습니까?

테이블이 기본 키가 아닌 순서로 색인을 생성하는 이유는 무엇입니까?

답변

0

당신이 한 명의 사용자 만

+0

예,이 응용 프로그램은 단일 사용자에 의해 사용되는이 없다면 + 1은 당신을 죽일 것 SELECT IDENT_CURRENT ('TABLENAME')를 사용하여. 변경 사항은 한 달에 한 번이 소프트웨어를 사용하여 처리되고 데이터베이스에로드되는 외부 소스에서 발생합니다. – LithiumIon

관련 문제