MSSQLSERVER_1505MSSQLSERVER_1505

이 항목 적용 대상: 예SQL Server없습니다Azure SQL 데이터베이스없습니다Azure SQL 데이터 웨어하우스 없습니다 병렬 데이터 웨어하우스THIS TOPIC APPLIES TO: yesSQL ServernoAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

세부 정보Details

제품 이름Product Name SQL ServerSQL Server
이벤트 IDEvent ID 15051505
이벤트 원본Event Source MSSQLSERVERMSSQLSERVER
구성 요소Component SQLEngineSQLEngine
심볼 이름Symbolic Name DUP_KEYDUP_KEY
메시지 텍스트Message Text 개체 이름 '%.ls' 및 인덱스 이름 '%.*ls'에 키가 중복되므로 CREATE UNIQUE INDEX 문이 종료되었습니다.CREATE UNIQUE INDEX terminated because a duplicate key was found for object name '%.ls' and index name '%.*ls'. 중복 키 값은 %ls입니다.The duplicate key value is %ls.

설명Explanation

이 오류는 고유 인덱스를 만들려고 했지만 테이블에 지정된 중복 값을 가진 행이 두 개 이상 있는 경우에 발생합니다.This error occurs when you attempt to create a unique index and more than one row in the table contains the specified duplicate value. 고유 인덱스는 인덱스를 만들고 UNIQUE 키워드를 지정하거나 UNIQUE 제약 조건을 만들 때 생성됩니다.A unique index is created when you create an index and specify the UNIQUE keyword, or when you create a UNIQUE constraint. 테이블은 인덱스 또는 제약 조건에 정의된 열에 중복 값이 있는 행을 포함할 수 없습니다.The table cannot contain any rows that have duplicate values in the columns defined in the index or constraint.

다음과 같은 Employee 테이블의 데이터를 고려합니다.Consider the data in the following Employee table:

LastNameLastName FirstNameFirstName JobTitleJobTitle HireDateHireDate
WaltersWalters RobRob Senior Tool DesignerSenior Tool Designer 2004-11-192004-11-19
BrownBrown KevinKevin Marketing AssistantMarketing Assistant NULLNULL
BrownBrown JoJo Design EngineerDesign Engineer NULLNULL
WaltersWalters RobRob Tool DesignerTool Designer 2001-08-092001-08-09

행에 중복 값이 있으므로 LastName 또는 LastName, FirstName의 열 조합에 고유 인덱스를 만들 수 없습니다.A unique index can not be created on the column combinations LastName or LastName, FirstName because of duplicate values in the rows.

HireDate 열에서는 고유성 위반이 발생할 가능성이 있습니다.Less obvious is the potential for a uniqueness violation in the HireDate column. 인덱싱 작업에서 NULL 값은 동일한 값으로 간주됩니다.For indexing purposes, NULL values compare as equal. 따라서 둘 이상의 행에서 키 값이 NULL인 경우에는 고유 인덱스 또는 제약 조건을 만들 수 없습니다.Therefore, you cannot create a unique index or constraint if the key values are NULL in more than one row. 위와 같은 데이터의 경우 HireDate 또는 LastName, HireDate 열 조합에 고유 인덱스를 만들 수 없습니다.Given the data above, a unique index cannot be created on the column combinations HireDate or LastName, HireDate.

오류 메시지 1505는 고유성 제약 조건을 위반한 첫 번째 행을 반환하므로Error message 1505 returns the first row that violates the uniqueness constraint. 테이블에 다른 중복 행이 있을 수 있습니다.There may be other duplicate rows in the table. 모든 중복 행을 찾으려면 지정된 테이블을 쿼리하고 GROUP BY 및 HAVING 절을 사용하여 중복 행을 반환하십시오.To find all duplicate rows, query the specified table and use the GROUP BY and HAVING clauses to report the duplicate rows. 예를 들어 다음 쿼리는 Employee 테이블에서 이름과 성이 중복되는 행을 반환합니다.For example, the following query returns the rows in the Employee table that have duplicate first and last names.

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

사용자 동작User Action

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

  • 인덱스 또는 제약 조건 정의에서 열을 추가하거나 제거하여 고유 복합 인덱스를 만듭니다.Add or remove columns in the index or constraint definition to create a unique composite. 앞의 예에서는 인덱스 또는 제약 조건 정의에 MiddleName 열을 추가하여 중복 문제를 해결할 수 있습니다.In the previous example, adding a MiddleName column to the index or constraint definition might resolve the duplication problem.

  • 고유 인덱스 또는 제약 조건을 만들 열을 선택할 때는 NOT NULL로 정의된 열을 선택합니다.Select columns that are defined as NOT NULL when you choose columns for a unique index or constraint. 이렇게 하면 둘 이상의 행에서 키 값이 NULL인 경우 발생하는 고유성 위반의 가능성을 없앨 수 있습니다.This eliminates the possibility of a uniqueness violation caused when more than one row contains NULL in the key values.

  • 중복 값이 데이터 입력 오류로 인한 것이면 데이터를 직접 수정한 다음 인덱스나 제약 조건을 만듭니다.If the duplicate values are the result of data entry errors, manually correct the data and then create the index or constraint. 테이블에서 중복 행을 제거하는 방법에 대한 자세한 내용은 기술 자료 문서 139444 SQL Server의 테이블에서 중복 행을 제거하는 방법을 참조하세요.For information about removing duplicate rows in a table, see Knowledge Base article 139444: How to remove duplicate rows from a table in SQL Server.

관련 항목:See Also

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