Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Details
| Attribute | Value |
|---|---|
| Productnaam | SQL Server |
| Gebeurtenis-id | 1505 |
| Bron van gebeurtenis | MSSQLSERVER |
| Onderdeel | SQLEngine |
| Symbolische naam | DUP_KEY |
| Berichttekst | CREATE UNIQUE INDEX werd beëindigd omdat er een dubbele sleutel werd gevonden voor objectnaam '%.*ls' en indexnaam '%.*ls'. De dubbele sleutelwaarde is %ls. |
Explanation
Deze fout ontstaat wanneer je probeert een unieke index te maken en meer dan één rij in de tabel de opgegeven dubbele waarde bevat. Een unieke index wordt aangemaakt wanneer je een index aanmaakt en het UNIEKE trefwoord specificeert, of wanneer je een UNIEKE constraint aanmaakt. De tabel kan geen rijen bevatten die dubbele waarden hebben in de kolommen die in de index of beperking zijn gedefinieerd.
Overweeg de gegevens in de volgende Employee-tabel :
| LastName | Voornaam | Functietitel | HireDate |
|---|---|---|---|
| Walters | Rob | Senior Gereedschapsontwerper | 2004-11-19 |
| Bruin | Kevin | Marketingassistent | NUL |
| Bruin | Jo | Ontwerpingenieur | NUL |
| Walters | Rob | Gereedschapsontwerper | 2001-08-09 |
Er kan geen unieke index worden aangemaakt op de kolomcombinaties Achternaam of Achternaam,Voornaam vanwege dubbele waarden in de rijen.
Minder voor de hand liggend is de mogelijkheid van een uniciteitsschending in de HireDate-kolom . Voor indexeringsdoeleinden vergelijken NULL-waarden als gelijk. Daarom kun je geen unieke index of constraint maken als de sleutelwaarden NULL zijn in meer dan één rij. Gezien bovenstaande gegevens kan er geen unieke index worden aangemaakt op de kolomcombinaties HireDate of Achternaam, HireDate.
Foutmelding 1505 geeft de eerste rij terug die de uniciteitsbeperking schendt. Er kunnen andere dubbele rijen in de tabel staan. Om alle dubbele rijen te vinden, raadpleeg je de gespecificeerde tabel en gebruik je de clausules GROUP BY en HAVING om de dubbele rijen te rapporteren. Bijvoorbeeld, de volgende query geeft de rijen in de Employee-tabel terug die dubbele voor- en achternamen hebben.
SELECTEER Achternaam, Voornaam, tellen(*) VAN dbo. Werknemer GROEP OP Achternaam, Voornaam HEEFT telling(*) > 1;
Gebruikersactie
Overweeg de volgende oplossingen.
Voeg kolommen toe of verwijder in de index- of constraintdefinitie om een unieke samenstelling te creëren. In het vorige voorbeeld kan het toevoegen van een MiddleName-kolom aan de index- of constraint-definitie het duplicatieprobleem oplossen.
Selecteer kolommen die als NIET NULL worden gedefinieerd wanneer je kolommen kiest voor een unieke index of constraint. Dit elimineert de mogelijkheid van een uniciteitsschending die ontstaat wanneer meer dan één rij NULL bevat in de sleutelwaarden.
Als de dubbele waarden het gevolg zijn van fouten in gegevensinvoer, corrigeer dan handmatig de data en maak vervolgens de index of beperking aan. Voor informatie over het verwijderen van dubbele rijen in een tabel, bekijk Remove duplicate rowes from a SQL Server table.
Zie ook
CREATE INDEX (Transact-SQL)
Maak unieke indexen
Unieke beperkingen creëren