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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top