MSSQLSERVER_1505

Detalles

Nombre del producto

SQL Server

Versión del producto

10.50

Número de compilación del producto

10.5

Identificador de evento

1505

Origen del evento

MSSQLSERVER

Componente

SQLEngine

Nombre simbólico

DUP_KEY

Texto del mensaje

La instrucción CREATE UNIQUE INDEX terminó porque se encontró una clave duplicada para el nombre de objeto '%.*ls' y el nombre de índice '%.*ls'. El valor de la clave duplicada es %ls.

Explicación

Este error se produce cuando se intenta crear un índice único y más de una fila de la tabla contiene el valor duplicado especificado. Un índice único se crea cuando se crea un índice y se especifica la palabra clave UNIQUE, o cuando se crea una restricción UNIQUE. La tabla no puede contener filas que tengan valores duplicados en las columnas definidas en el índice o la restricción.

Considere los datos de la tabla Employee siguiente:

LastName

FirstName

JobTitle

HireDate

Walters

Rob

Senior Tool Designer

2004-11-19

Brown

Kevin

Marketing Assistant

NULL

Brown

Jo

Design Engineer

NULL

Walters

Rob

Tool Designer

2001-08-09

Un índice único no se puede crear en las combinaciones de columnas LastName o LastName, FirstName debido a los valores duplicados en las filas.

Menos obvia es la posibilidad de una infracción de unicidad en la columna HireDate. A efectos de índices, los valores NULL son comparables a igual. Por lo tanto, no se puede crear un índice o una restricción únicos si los valores de clave son NULL en más de una fila. Dados los datos anteriores, un índice único no se puede crear en las combinaciones de columnas HireDate o LastName, HireDate.

El mensaje de error 1505 devuelve la primera fila que infringe la restricción de unicidad. Puede haber otras filas duplicadas en la tabla. Para encontrar todas las filas duplicadas, consulte la tabla especificada y utilice las cláusulas GROUP BY y HAVING para notificar las filas duplicadas. Por ejemplo, la consulta siguiente devuelve las filas de la tabla Employee que tiene nombres y apellidos duplicados.

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

Acción del usuario

Considere las soluciones siguientes.

  • Agregar o quitar columnas de la definición de restricción o de índice para crear un índice compuesto único. En el ejemplo anterior, puede que al agregar una columna MiddleName a la definición de índice o de restricción se resuelva el problema de duplicación.

  • Seleccionar columnas que se hayan definido como NOT NULL al elegir columnas para un índice o una restricción únicos. Esto elimina la posibilidad de que se produzca una infracción de unicidad cuando más de una fila contenga NULL en los valores de clave.

  • Si los valores duplicados son consecuencia de errores de entrada de datos, corregir manualmente los datos y crear el índice o la restricción. Para obtener información sobre cómo quitar las filas duplicadas en una tabla, vea el artículo 139444 de Knowledge Base relacionado con el proceso de quitar filas duplicadas de una tabla en SQL Server.