Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Details
| Attribute | Value |
|---|---|
| Produktnamn | SQL Server |
| Händelse-ID | 1505 |
| Händelsekälla | MSSQLSERVER |
| Component | SQLEngine |
| Symboliskt namn | DUP_KEY |
| Meddelandetext | CREATE UNIQUE INDEX avslutades eftersom en dubblett nyckel hittades för objektnamn '%.*ls' och indexnamn '%.*ls'. Dubblettnyckelvärdet är %ls. |
Explanation
Detta fel uppstår när du försöker skapa ett unikt index och mer än en rad i tabellen innehåller det angivna dubblettvärdet. Ett unikt index skapas när du skapar ett index och anger det UNIKA nyckelordet, eller när du skapar en UNIK begränsning. Tabellen kan inte innehålla några rader som har dubblettvärden i kolumnerna som definieras i indexet eller begränsningen.
Betrakta datan i följande Medarbetartabell :
| Efternamn | FirstName | Jobbtitel | HireDate |
|---|---|---|---|
| Walters | Bengt | Senior verktygsdesigner | 2004-11-19 |
| Brun | Kevin | Marknadsassistent | NOLL |
| Brun | Jo | Konstruktör | NOLL |
| Walters | Bengt | Verktygsdesigner | 2001-08-09 |
Ett unikt index kan inte skapas på kolumnkombinationerna Efternamn eller Efternamn, Förnamn, på grund av dubblettvärden i raderna.
Mindre uppenbart är risken för ett unikhetsbrott i HireDate-kolumnen . För indexeringsändamål jämförs NULL-värden som lika. Därför kan du inte skapa ett unikt index eller en begränsning om nyckelvärdena är NULL i mer än en rad. Givet ovanstående data kan ett unikt index inte skapas på kolumnkombinationerna HireDate eller Efternamn,HireDate.
Felmeddelandet 1505 returnerar den första raden som bryter mot unikhetsbegränsningen. Det kan finnas andra dubblettrader i tabellen. För att hitta alla dubblettrader, sök i den angivna tabellen och använd klausulerna GROUP BY och HAVING för att rapportera dubblettraderna. Till exempel returnerar följande fråga raderna i tabellen Employee som har dubbletter av för- och efternamn.
VÄLJ Efternamn, Förnamn, räkna(*) FRÅN dbo. Anställd GRUPP EFTER Efternamn, Förnamn HAR räkning(*) > 1;
Användaråtgärd
Överväg följande lösningar.
Lägg till eller ta bort kolumner i index- eller begränsningsdefinitionen för att skapa en unik sammansättning. I det föregående exemplet kan tillägg av en kolumn Mellannamn i index- eller begränsningsdefinitionen lösa dupliceringsproblemet.
Välj kolumner som definieras som INTE NULL när du väljer kolumner för ett unikt index eller begränsning. Detta eliminerar möjligheten till en unikhetsöverträdelse som uppstår när mer än en rad innehåller NULL i nyckelvärdena.
Om de dubbletter som är resultatet av datainmatningsfel, korrigera datan manuellt och skapa sedan indexet eller begränsningen. För information om att ta bort dubblettrader i en tabell, se Remove duplicate rows from a SQL Server table.
Se även
CREATE INDEX (Transact-SQL)
Skapa unika index
Skapa unika begränsningar