2014-02-19 8 views
3

안녕하세요 읽어 주셔서 감사합니다 그리고 아마도 나에게 도움이Firebird2.5 오류 : "고유 인덱스에 중복 값"없이 중복 데이터

내 문제의

간략한 설명 :

내가 Firebird- 하나에서 데이터를 복사하고 데이터베이스를 다른 곳 (V14)에 연결하고 IBExpert를 사용하고 있습니다. 테이블의 이름은 같으며 구조가 같습니다. 설명하기 위해 이전 데이터베이스 A의 데이터를 포함하는 테이블을 호출하려고합니다. 테이블에 데이터를 삽입하려면 B를 호출해야합니다.

그래서 모든 데이터를 가져 오는 것이 좋습니다. 테이블 A에서와하는 테이블 B.에 삽입 그렇게 할 코드의 작은 조각은 다음과 같습니다

INSERT into [V14].BSMZ SELECT * FROM BSMZ 

(일부 행이 옮겨진 된 후에) 내가 오류 메시지가 나타난다이 실행 :

잘못된 삽입 또는 갱신 값 : 오브젝트 C 럼이 제한됨 - 테이블 행 2 개가 중복 된 C 럼 값을 가질 수 없음. 고유 인덱스 "UI_BSMZ"

에 (활성 트랜잭션에 표시) 중복 된 값을 저장하려고이 독특한-지수는이 데이터-colums를 포함하고 테이블 B와 A에 적용

이 문제의 원인이 여러 행이 있습니다 원하는대로 여러 행이 전송됩니다. 테이블 B에 삽입 할 수없는 행이 테이블 B에있는 alredy가 아닌 unique-key-colum에 값을 가지고 있다고 제안했습니다.

(테스트 목적으로 제약 조건을 제거했습니다. 테이블 B에서.하지만 여전히 같은 오류 메시지가 나옵니다. 더 많이 혼란스럽게합니다.)

나는이 문제를 일으킬 수 있고 어떤 힌트에 감사 할 것입니다.

+0

를 다시 빌드합니다. 또한 제한된 열 중 하나에 Null 값이 없는지 확인하십시오. –

+0

제한된 열에 null 값이 없습니다. 어쩌면 나는이 문제를 해결하는 경우 손상된 인덱스를 수정하고 좀 걸릴 구글을 요청해야 ... – user3327902

+0

또 다른 한가지 : (var) char 열을 포함 제약 조건을 포함합니까? 그렇다면 대소 문자를 구분하지 않고 액센트를 구분하지 않는 열이 될 수 있습니까? –

답변

1

당신이있어 정확히 오류 정보를 고유 인덱스 "UI_BSMZ" 고유 제한 조건의이 선언을 찾을 수 - 그것은 에 B에서 외래 키에 대한되지 않습니다 일부 필드 [S] 소스

에 테이블에 제약 조건입니다 이 영국 UI_BSMZ

SELECT UK_FIELD_1, UK_FIELD_2, .. FROM TABLE_NAME GROUP BY UK_FIELD_1, UK_FIELD_2, .. HAVING  COUNT(*)>1 PLAN (TABLE_NAME NATURAL) 

의 필드에 데이터베이스 실행 쿼리이 쿼리는 일부 행을 반환하는 경우 - 소스 인덱스보다가 손상 - ​​여부를

이 deletin 후 (인덱스를 해결하기 위해 존재한다 g 중복) -이 실행

Alter Index INDEX_NAME ACTIVE; 

이는 고유 제한 조건을 백업하는 부패 지수에서 발생할 수있는 어떤 경우에는 색인