MSSQLSERVER_1505

적용 대상:SQL Server

세부 사항

attribute
제품 이름 SQL Server
이벤트 ID 1505
이벤트 원본 MSSQLSERVER
구성 요소 SQLEngine
심볼 이름 DUP_KEY
메시지 텍스트 개체 이름 '%.*ls' 및 인덱스 이름 '%.*ls'에 대해 중복 키를 찾았으므로 CREATE UNIQUE INDEX가 종료되었습니다. 중복 키 값은 %ls입니다.

설명

이 오류는 고유 인덱스를 만들려고 할 때 발생하며 테이블의 행에 지정된 중복 값이 둘 이상 포함되어 있습니다. 고유 인덱스는 인덱을 만들고 UNIQUE 키워드를 지정하거나 UNIQUE 제약 조건을 만들 때 만들어집니다. 테이블은 인덱스 또는 제약 조건에 정의된 열에 중복 값이 있는 행을 포함할 수 없습니다.

다음 Employee 테이블의 데이터를 고려합니다.

LastName FirstName 직함 HireDate
월터 스 선임 도구 디자이너 2004-11-19
Brown 케빈 마케팅 보조 NULL
Brown Jo 디자인 엔지니어 NULL
월터 스 Tool Designer 2001-08-09

행의 값이 중복되어 LastName 또는 LastName, FirstName 열 조합에 고유한 인덱스를 만들 수 없습니다.

HireDate 열의 고유성 위반 가능성이 덜 분명합니다. 인덱싱을 위해 NULL 값은 같음으로 비교됩니다. 따라서 키 값이 둘 이상의 행에서 NULL인 경우 고유 인덱스 또는 제약 조건을 만들 수 없습니다. 위와 같은 데이터의 경우 HireDate 또는 LastName, HireDate 열 조합에 고유 인덱스를 만들 수 없습니다.

오류 메시지 1505는 고유성 제약 조건을 위반한 첫 번째 행을 반환하므로 테이블에 다른 중복 행이 있을 수 있습니다. 모든 중복 행을 찾으려면 지정된 테이블을 쿼리하고 GROUP BY 및 HAVING 절을 사용하여 중복 행을 반환하십시오. 예를 들어 다음 쿼리는 Employee 테이블에서 이름과 성이 중복된 행을 반환합니다.

SELECT LastName, FirstName, count(*) FROM dbo. Employee GROUP BY LastName, FirstName HAVING count(*) > 1;

사용자 작업

다음과 같은 해결 방법을 고려해 보십시오.

  • 인덱스 또는 제약 조건 정의에서 열을 추가하거나 제거하여 고유한 복합을 만듭니다. 이전 예제에서 인덱스 또는 제약 조건 정의에 MiddleName 열을 추가하면 중복 문제가 해결될 수 있습니다.

  • 고유 인덱스 또는 제약 조건에 대한 열을 선택할 때 NOT NULL로 정의된 열을 선택합니다. 이렇게 하면 둘 이상의 행에서 키 값이 NULL인 경우 발생하는 고유성 위반의 가능성을 없앨 수 있습니다.

  • 중복 값이 데이터 입력 오류의 결과인 경우 데이터를 수동으로 수정한 다음 인덱스 또는 제약 조건을 만듭니다. 테이블에서 중복 행을 제거하는 방법에 대한 자세한 내용은 SQL Server 테이블에서 중복 행 제거를 검토하세요.

참고 항목

CREATE INDEX(Transact-SQL)
고유 인덱스 만들기
UNIQUE 제약 조건 만들기