MSSQLSERVER_1505

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