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 테이블에서 중복 행 제거를 검토하세요.