Impossible de créer l'index à cause de doublon qui n'existe pas?
J'obtiens une erreur d'exécution de la commande Transact-SQL suivante:
CREATE UNIQUE NONCLUSTERED INDEX IX_TopicShortName
ON DimMeasureTopic(TopicShortName)
L'erreur est:
Msg 1505, Niveau 16, État 1, Ligne 1
Le CREATE UNIQUE INDEX
terminé en raison d'un double de la clé a été
trouvé pour le nom de l'objet
'dbo.DimMeasureTopic' et l'indice
nom de "IX_TopicShortName'. L'
valeur de clé en double est ().
Quand je lance SELECT * FROM sys.indexes WHERE name = 'IX_TopicShortName'
ou SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[DimMeasureTopic]')
la IX_TopicShortName d'index ne s'affiche pas. Donc, il ne semble pas être un doublon.
J'ai le même schéma dans une autre base de données et peut créer l'index, sans questions. Des idées pourquoi ne pas créer ici?
- A ce même problème lors d'une migration qui s'exécute lorsque quelqu'un se met à jour. j'ai résolu ce problème en vérifiant d'abord les doublons et les supprimer, puis de vérifier si l'INDICE existe, et si ce n'est de le créer.
Vous devez vous connecter pour publier un commentaire.
Ce n'est pas que l'index existe déjà, mais qu'il y a des valeurs en double de la
TopicShortName
champ dans la table elle-même. Selon le message d'erreur le double de la valeur est une chaîne vide (c'est peut-être une facette de l'affichage, je suppose). Ces copies empêcher la création d'unUNIQUE
index.Vous pouvez exécuter une requête pour confirmer que vous avez un doublon:
Sans doute dans les autres bases de données, les données sont différentes, et les doublons ne sont pas présents.
Le doublon est dans vos données, essayez de l'exécution de cette requête pour le trouver.
C'est parce que vous avez des enregistrements dans la table déjà qui ne sont pas uniques (par les sons de celui-ci, 2 enregistrements avec une valeur vide dans le TopicShortName champ).
Donc, c'est de faire avec les données, et non l'indice lui-même.
Si vous utilisez le code basé sur les migrations, et vous renommez une propriété d'une entité et que vous avez un index unique de la propriété, entity framework créer une nouvelle colonne et d'essayer d'ajouter un index unique pour la nouvelle colonne, mais la nouvelle colonne a toutes les valeurs null, donc ce sera un échec. Vous devez modifier manuellement le code de migration pour copier les données à partir de vieux colonne avant la ligne pour créer un index.
Il devrait avoir spécifié la valeur de clé en double dans le message d'erreur. "La valeur de clé en double est (' ', ' ', ' ') La déclaration a été résilié. Vous avez des valeurs qui doivent être abordés.