Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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.