MSSQLSERVER_1505

platí pro:SQL Server

Details

Attribute Value
Název produktu SQL Server
ID události 1505
Zdroj události MSSQLSERVER
Součást SQLEngine
Symbolický název DUP_KEY
Text zprávy CREATE UNIQUE INDEX skončil, protože byl nalezen duplicitní klíč pro název objektu '%.*ls' a index name '%.*ls'. Duplicitní hodnota klíče je %ls.

Vysvětlení

Tato chyba nastává, když se pokusíte vytvořit jedinečný index a více než jeden řádek v tabulce obsahuje zadanou duplicitní hodnotu. Unikátní index vzniká, když vytvoříte index a specifikujete JEDINEČNÉ klíčové slovo, nebo když vytvoříte JEDINEČNÉ omezení. Tabulka nesmí obsahovat žádné řádky, které mají duplicitní hodnoty ve sloupcích definovaných v indexu nebo omezení.

Zvažte data v následující tabulce Zaměstnanci :

Příjmení Křestní jméno Pracovní pozice Hiredate
Walters Robert Senior Tool Designer 2004-11-19
Hnědý Kevin Marketingový asistent NULA
Hnědý Jo Konstruktér NULA
Walters Robert Návrhář nástrojů 2001-08-09

Unikátní index nelze vytvořit na kombinacích sloupců Příjmení nebo Příjmení, Křestní jméno kvůli duplicitním hodnotám v řádcích.

Méně zřejmá je možnost porušení jedinečnosti ve sloupci HireDate . Pro účely indexace se hodnoty NULL porovnávají jako stejné. Proto nemůžete vytvořit jedinečný index nebo omezení, pokud jsou hodnoty klíčů NULL ve více než jednom řádku. Na základě výše uvedených dat nelze vytvořit unikátní index na kombinace sloupců HireDate nebo LastName, HireDate.

Chybová zpráva 1505 vrací první řádek, který porušuje omezení jedinečnosti. V tabulce mohou být další duplicitní řádky. Pro nalezení všech duplicitních řádků se dotazujte na zadanou tabulku a použijte klauzule GROUP BY a HAVING k nahlášení duplicitních řádků. Například následující dotaz vrací řádky v tabulce Zaměstnanec , které mají duplicitní jména a příjmení.

VYBERTE Příjmení, KřestníJméno, počítat(*) Z dbo. Skupina zaměstnanců PODLE příjmení, křestní JMÉNO MÁ počet(*) > 1;

Uživatelská akce

Zvažte následující řešení.

  • Přidávat nebo odebírat sloupce v definici indexu nebo omezení, aby vznikl unikátní kompozit. V předchozím příkladu může přidání sloupce MiddleName do indexu nebo definice omezení vyřešit problém duplikace.

  • Vyberte sloupce, které jsou definovány jako NENULL, když vybíráte sloupce pro unikátní index nebo omezení. Tím se eliminuje možnost porušení jedinečnosti způsobeného tím, že více než jeden řádek obsahuje NULL v klíčových hodnotách.

  • Pokud jsou duplicitní hodnoty výsledkem chyb při zadávání dat, ručně je opravte a poté vytvořte index nebo omezení. Pro informace o odstranění duplicitních řádků v tabulce navštivte Odstraňte duplicitní řádky z tabulky SQL Server.