2009-12-28 4 views
1

SQL Server 2008을 사용하고 있는데, id (숫자) 열이있는 테이블을 기본 키로 사용했습니다. 또한 3 개의 varchar 열에 고유 색인이 있습니다. 세 열의 정확한 세트가있는 행을 추가 할 수있었습니다. 나는 값에 대한 간단한 질의를 통해 그것을 검증하였고 2 행이 반환되었다.중복을 허용하는 SQL Server 고유 인덱스

색인을 편집하고 ID 열을 추가했습니다. 다시 편집하려고하고 id 열을 제거하면 중복 행이 있다고 불평하지만 인덱스를 삭제했지만 만들 수는 없습니다.

다음 복제본의 데이터베이스를 정리하고 고유 한 클러스터되지 않은 3 개의 varchars를 사용하여 색인을 다시 작성합니다. 이제 복제본을 허용하지 않고 올바르게 작동합니다.

이 색인의 고유성이 무시 된 이유를 아는 사람이 있습니까?

+0

인덱스가 비활성화되지 않았고 값이 정확히 동일했습니다. atsolberg.com/dupPaos.JPG 다음은 인덱스의 속성과 반환 된 두 행의 쿼리 + 결과를 보여주는 그림입니다. 또한 varchars 값이 동일한 길이인지 확인하기 위해 select에 len (*)을 추가했습니다. 또한이 행은 색인이 존재하기 전에 추가 된 이전 행이 아니라 방금 추가 된 행입니다. –

답변

5

인덱스가 비활성화되었을 수 있습니다 (Disabling Indexes 참조). 'duplicate'값이 달라졌거나 (예 : 뒤 공백) 테스트가 잘못되었을 수 있습니다.

적용된 고유 색인에 중복을 삽입하지 않았는지 확인하십시오.

+0

인덱스가 비활성화되지 않았고 값이 정확히 동일했습니다. http://atsolberg.com/dupPaos.JPG 다음은 인덱스의 속성을 보여주는 그림과 반환 된 두 행의 쿼리 + 결과입니다. 또한 varchars 값이 동일한 길이인지 확인하기 위해 select에 len (***)을 추가했습니다. 또한이 행은 색인이 존재하기 전에 추가 된 이전 행이 아니라 방금 추가 된 행입니다. –

+0

Repro 스크립트와 나는 당신을 믿을 것이다. –

+0

SI는 SET ANSI PADDING 설정과 SELECT WHERE 절이 값과 일치하는 조합을 살펴 보는 것도 중요합니다. –

0

저는이 주제에 대한 전문가는 아니지만 '고유합니다'- 색인 설정은 색인이 작성/저장되는 방식을 의미 할 뿐이며 제한 사항이 아닐 수도 있습니다. 이는 아마도 색인의 성능이 차선책임을 의미합니다. 인덱스를 만들 때 DBMS에서이를 확인할 수 있습니다.

관련 문제