Unfähig Index zu erstellen, weil die doppelten, die vorhanden ist oder nicht?
-
24-09-2019 - |
Frage
Ich erhalte eine Fehlermeldung den folgenden Transact-SQL-Befehl ausgeführt wird:
CREATE UNIQUE NONCLUSTERED INDEX IX_TopicShortName
ON DimMeasureTopic(TopicShortName)
Der Fehler ist:
Msg 1505, Stufe 16, Status 1, Zeile 1 Die CREATE UNIQUE INDEX-Anweisung weil ein doppelter Schlüssel beendet war für den Objektnamen gefunden ‚Dbo.DimMeasureTopic‘ und der Index Namen 'IX_TopicShortName'. Das Nachschlüssel Wert ().
Wenn ich SELECT * FROM sys.indexes WHERE name = 'IX_TopicShortName'
laufen oder SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[DimMeasureTopic]')
der IX_TopicShortName Index nicht angezeigt. So scheint es kein Duplikat zu sein.
Ich habe das gleiche Schema in einer anderen Datenbank und kann den Index ohne Probleme dort erstellen. Irgendwelche Ideen, warum es nicht schaffen hier?
Lösung
Es ist nicht, dass der Index bereits vorhanden ist, aber dass es doppelte Werte des TopicShortName
Feldes in der Tabelle selbst. Nach der Fehlermeldung ist der doppelte Wert eine leere Zeichenfolge (es könnte nur eine Facette sein die Entsendung I guess). Eine solche Duplikate verhindern die Schaffung eines UNIQUE
Index.
Sie können eine Abfrage zu bestätigen führen, dass Sie ein Duplikat haben:
SELECT
TopicShortName,
COUNT(*)
FROM
DimMeasureTopic
GROUP BY
TopicShortName
HAVING
COUNT(*) > 1
Vermutlich in der anderen Datenbank die Daten unterschiedlich sind, und die Duplikate sind nicht vorhanden.
Andere Tipps
Das Duplikat ist in Ihren Daten, versuchen Sie diese Abfrage ausgeführt wird, es zu finden.
SELECT TopicShortName, COUNT(*)
FROM DimMeasureTopic
GROUP BY TopicShortName
HAVING COUNT(*) > 1
Es ist, weil Sie Datensätze in der Tabelle haben bereits die nicht eindeutig ist (von den Klängen der es, zwei Datensätze mit einem leeren Wert im TopicShortName Feld).
So ist es mit den Daten zu tun, nicht der Index selbst.
Wenn Sie mit Code-basierte Migrationen, und Sie eine Eigenschaft eines Unternehmens umbenennen und Sie sind mit einem eindeutigen Index für die Eigenschaft, Entity Framework wird eine neue Spalte erstellen und zu versuchen, einen eindeutigen Index für die neue Spalte hinzuzufügen, aber die neue Spalte alle null-Werte hat, daher wird es scheitern. Sie müssen manuell den Migrationscode ändern, um die Daten aus dem alten Spalte vor der Zeile zu kopieren Index zu erstellen.
Es sollte den doppelten Schlüsselwert in der Fehlermeldung angegeben. „Der doppelte Schlüsselwert (‚‚‚‘,‘‘) Die Anweisung wurde beendet. Sie haben doppelte Werte, dass müssen angegangen werden.