Freigeben über


MSSQLSERVER_1505

Gilt für: SQL Server

Details

attribute Wert
Produktname SQL Server
Ereignis-ID 1505
Ereignisquelle MSSQLSERVER
Komponente SQLEngine
Symbolischer Name DUP_KEY
Meldungstext CREATE UNIQUE INDEX wurde beendet, da ein doppelter Schlüssel für den Objektnamen '%.*ls' und den Indexnamen '%.*ls' gefunden wurde. Der doppelte Schlüsselwert ist %ls.

Erklärung

Dieser Fehler tritt auf, wenn Sie versuchen, einen eindeutigen Index zu erstellen, und der angegebene doppelte Wert in mehreren Zeilen in der Tabelle enthalten ist. Ein eindeutiger Index wird erstellt, wenn Sie einen Index erstellen und das UNIQUE-Schlüsselwort angeben oder wenn Sie eine UNIQUE-Einschränkung erstellen. Die Tabelle darf keine Zeilen mit doppelten Werten in den Spalten enthalten, die im Index oder in der Einschränkung definiert sind.

Nehmen Sie als Beispiel die Daten aus der folgenden Employee-Tabelle:

LastName FirstName JobTitle HireDate
Walters Rob Senior Tool Designer 2004-11-19
Braun Kevin Marketing-Assistent NULL
Braun Jo Design Engineer NULL
Walters Rob Tool Designer 2001-08-09

Für die Spaltenkombinationen LastName oder LastName, FirstName kann aufgrund doppelter Werte in den Zeilen kein eindeutiger Index erstellt werden.

Schwieriger zu erkennen ist der Verstoß gegen die Eindeutigkeit in der Spalte HireDate. Beim Erstellen von Indizes werden NULL-Werte als "gleich" betrachtet. Daher können Sie keinen eindeutigen Index bzw. keine eindeutige Einschränkung erstellen, wenn die Schlüsselwerte mehrerer Zeilen NULL-Werte enthalten. Mit den oben genannten Daten kann für die Spaltenkombinationen HireDate oder LastName, HireDate kein eindeutiger Index erstellt werden.

Fehlermeldung 1505 gibt die erste Zeile zurück, in der ein Verstoß gegen die Eindeutigkeitseinschränkung vorliegt. Es gibt möglicherweise weitere doppelte Zeilen in der Tabelle. Führen Sie zum Ermitteln aller doppelten Zeilen eine Abfrage der angegebenen Tabelle mit der GROUP BY-Klausel und der HAVING-Klausel aus, um die doppelten Zeilen zu melden. Mit folgender Abfrage werden beispielsweise die Zeilen aus der Employee-Tabelle zurückgegeben, die doppelte Vor- und Nachnamen aufweisen.

SELECT LastName, FirstName, count(*) FROM dbo. MitarbeiterGRUPPE NACH Nachname, Vorname HAVING Anzahl(*) > 1;

Benutzeraktion

Ziehen Sie die folgenden Lösungen in Betracht:

  • Fügen Sie der Index- oder Einschränkungsdefinition Spalten hinzu, oder entfernen Sie Spalten, um eine eindeutige Zusammensetzung zu erstellen. Im vorhergehenden Beispiel könnte das Problem gelöst werden, indem Sie der Index- oder Einschränkungsdefinition eine MiddleName-Spalte hinzufügen.

  • Wählen Sie die als NOT NULL definierten Spalten aus, wenn Sie die Spalten für einen eindeutigen Index bzw. eine eindeutige Einschränkung auswählen. Damit können Sie die Möglichkeit eines Verstoßes gegen die Eindeutigkeit vermeiden, wenn die Schlüsselwerte mehrerer Zeilen NULL-Werte enthalten.

  • Wenn die doppelten Werte durch Dateneingabefehler entstanden sind, korrigieren Sie die Daten manuell, und erstellen Sie dann den Index bzw. die Einschränkung. Informationen zum Entfernen doppelter Zeilen in einer Tabelle erhalten Sie unter Entfernen doppelter Zeilen aus einer SQL Server-Tabelle.

Weitere Informationen

CREATE INDEX (Transact-SQL)
Erstellen eindeutiger Indizes
Erstellen von Unique-Einschränkungen