una tipos tabla sintaxis practicas nonclustered indice estructura ejemplo diseño crear consultar clustered buenas sql-server-2005 tsql indexing unique-index

sql-server-2005 - tipos - sintaxis indices sql



¿No se puede crear el índice debido a un duplicado que no existe? (4)

El duplicado está en sus datos, intente ejecutar esta consulta para encontrarlo.

SELECT TopicShortName, COUNT(*) FROM DimMeasureTopic GROUP BY TopicShortName HAVING COUNT(*) > 1

Me aparece un error al ejecutar el siguiente comando de Transact-SQL:

CREATE UNIQUE NONCLUSTERED INDEX IX_TopicShortName ON DimMeasureTopic(TopicShortName)

El error es:

Msg 1505, nivel 16, estado 1, línea 1 La instrucción CREATE UNIQUE INDEX finalizó porque se encontró una clave duplicada para el nombre del objeto ''dbo.DimMeasureTopic'' y el nombre del índice ''IX_TopicShortName''. El valor duplicado de la clave es ().

Cuando ejecuto SELECT * FROM sys.indexes WHERE name = ''IX_TopicShortName'' o SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N''[dbo].[DimMeasureTopic]'') no se visualiza el índice IX_TopicShortName. Entonces no parece haber un duplicado.

Tengo el mismo esquema en otra base de datos y puedo crear el índice sin problemas allí. ¿Alguna idea de por qué no creará aquí?


Es porque ya tiene registros en la tabla que no son únicos (por los sonidos de la misma, 2 registros con un valor en blanco en el campo TopicShortName).

Entonces, tiene que ver con los datos, no con el índice en sí.


No es que el índice ya exista, sino que hay valores duplicados del campo TopicShortName en la tabla misma. Según el mensaje de error, el valor duplicado es una cadena vacía (podría ser una faceta de la publicación, supongo). Dichos duplicados impiden la creación de un índice UNIQUE .

Puede ejecutar una consulta para confirmar que tiene un duplicado:

SELECT TopicShortName, COUNT(*) FROM DimMeasureTopic GROUP BY TopicShortName HAVING COUNT(*) > 1

Presumiblemente en la otra base de datos los datos son diferentes y los duplicados no están presentes.


Si usa migraciones basadas en código y cambia el nombre de una propiedad de una entidad y tiene un índice único para la propiedad, la infraestructura de la entidad creará una nueva columna e intentará agregar un índice exclusivo para la nueva columna, pero la nueva columna tiene todos los valores nulos, por lo tanto, fallará. Necesita modificar manualmente el código de migración para copiar los datos de la columna anterior a la línea para crear el índice.