Jak odebrat duplicitní řádky z tabulky v serveru SQL Server

Překlady článku Překlady článku
ID článku: 139444 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Souhrn

Microsoft SQL Server tabulek by nikdy obsahovat duplicitní řádky, ani Nejedinečný primární klíče. Pro stručnost bude někdy naše primární klíče jako "klíčem" nebo "PK" v tomto článku, ale to bude vždy označení "primární klíčem. Duplicitní PKs jsou narušení entity integrity a měl by být zakázáno v relační systém. Má různé mechanismy pro SQL Server vynucení integrity entity, včetně indexů, JEDINEČNÁ omezení Omezení PRIMÁRNÍHO klíče a aktivační procedury.

Bez ohledu na to za neobvyklých okolností duplicitní primární klíče může dojít, a v takovém případě musí být odstraněny. Způsob jejich může dojít je-li duplicitní Existují PKs-relační data mimo serveru SQL Server, a data importovat, zatímco PK jedinečnosti nejsou prosazena. Jiným způsobem, mohou dojít prostřednictvím chybu návrhu databáze, například nemusí vynucení entity integrity pro každou tabulku.

Často jsou duplicitní PKs zaznamenali při pokusu o vytvoření jedinečného indexu, Pokud jsou nalezeny duplicitní klíče, který bude přerušena. Tato zpráva je:
Msg 1505, úroveň 16 stavu 1 Vytvoření jedinečného indexu byla přerušena na duplicitní klíč.
Používáte-li SQL Server 2000 nebo SQL Server 2005, můžete obdržet následující chybovou zprávu:
Msg 1505 úroveň 16, stav 1 vytvořit JEDINEČNÝ INDEX ukončena, protože pro název objektu nebyl nalezen duplicitní klíč ' %. * ls' a název indexu ' %. * ls'. Duplicitní klíče hodnotu % ls.
Tento článek popisuje, jak vyhledat a odebrat duplicitní primární klíče z Tabulka. Však úzce zkontrolujte procesu, které jsou povoleny duplikáty stát, aby se zabránilo opakování.

Další informace

V tomto příkladu použijeme následující tabulka s duplicitními hodnotami PK. V této tabulce primární klíč je ve dvou sloupcích (sloupci Sloupec1, Sloupec2). Jsme nelze Vytvořte jedinečný index nebo omezení PRIMÁRNÍHO klíče, protože mají dva řádky duplicitní PKs. Tento postup ukazuje, jak identifikovat a odstranit duplikáty.
create table t1(col1 int, col2 int, col3 char(50))
insert into t1 values (1, 1, 'data value one')
insert into t1 values (1, 1, 'data value one')
insert into t1 values (1, 2, 'data value two')
				
Prvním krokem je určit, které řádky mají duplicitní hodnoty primárního klíče:
SELECT col1, col2, count(*)
FROM t1
GROUP BY col1, col2
HAVING count(*) > 1
				
Vrátí jeden řádek pro každou sadu duplicitních hodnot PK v tabulce. Poslední sloupec v tento výsledek je počet duplicitních položek pro konkrétní hodnoty PK.

Zmenšit tuto tabulkuRozšířit tuto tabulku
sloupci Sloupec1Sloupec2
112


Existuje pouze několik sad duplicitní hodnoty PK, je nejlepší postup Chcete-li odstranit ručně na individuálním základě. Například:
set rowcount 1
delete from t1
where col1=1 and col2=1
				
N-1 počet duplicitních položek pro dané hodnoty klíče je třeba zadat hodnotu rowcount. V tomto příkladu jsou dva duplikáty tak rowcount nastaven na hodnotu 1. Sloupci Sloupec1/Sloupec2 hodnoty jsou převzaty z výše uvedené skupiny ve výsledku dotazu. Je-li seskupit dotaz vrátí více řádků, dotaz "nastavit rowcount" muset spustit jednou pro každou z těchto řádků. Pokaždé, když je spuštěna, nastavte na n-1 počet duplikáty konkrétní hodnoty PK rowcount.

Před odstraněním řádků, ověřte, že je celý řádek Duplikujte. Zatímco je nepravděpodobné, je možné, že hodnoty PK jsou duplicitní, ještě není řádek jako celek. Příklad by tabulku s Rodné číslo jako primární klíč a mají dvě různé osoby (nebo řádky) se stejným číslem, každý má jedinečné atributy. V takových případ může také způsobit jakékoli poruchy způsobené duplicitní klíč platné jedinečné údaje uváděné v řádku. By tato data zkopírována a zachována pro studium a nejvíce odsouhlasení před k odstranění dat.

Pokud existuje mnoho různých sad duplicitní hodnoty PK v tabulce, může být příliš časově náročná odeberte jednotlivě. V tomto případě lze použít následující postup:
  1. Nejprve spusťte výše Group dotazu zjistit, kolik sad duplicitní hodnoty PK existují a počet duplicitních záznamů pro každou sadu.
  2. Vyberte duplicitní hodnoty klíče do tabulky hospodářství. Například:
    SELECT col1, col2, col3=count(*)
    INTO holdkey
    FROM t1
    GROUP BY col1, col2
    HAVING count(*) > 1
    					
  3. Vyberte duplicitní řádky do tabulky hospodářství, vyloučení duplicity v procesu. Například:
    SELECT DISTINCT t1.*
    INTO holddups
    FROM t1, holdkey
    WHERE t1.col1 = holdkey.col1
    AND t1.col2 = holdkey.col2
    					
  4. V tomto okamžiku v tabulce holddups by měl mít jedinečný PKs, však to nebude případ Pokud t1 duplicitní PKs ještě jedinečné řádky (jako ve výše uvedeném příkladu ČSP). Ověřte, že každý klíč v holddups je jedinečný a že nemáte duplicitní klíče dosud jedinečné řádky. Pokud tedy musí zastavit zde a odsouhlasit, které řádky chcete zachovat pro dané duplicitního klíče. Například dotaz:
    SELECT col1, col2, count(*)
    FROM holddups
    GROUP BY col1, col2
    						
    počet 1 pro každý řádek by měl vrátit. Pokud ano, pokračujte krokem 5 níže. Pokud ne, jste duplicitní klíče dosud jedinečné řádky a je třeba rozhodnout, řádky, které chcete uložit. Obvykle to bude znamenat zrušení řádku, nebo vytváření nových jedinečnou hodnotu klíče pro tento řádek. Proveďte jeden z následujících dvou kroků pro každé takové duplicitní PK v tabulce holddups.
  5. Odstraníte duplicitní řádky z původní tabulky. Například:
    DELETE t1
    FROM t1, holdkey
    WHERE t1.col1 = holdkey.col1
    AND t1.col2 = holdkey.col2
    					
  6. Vrácení jedinečné řádky do původní tabulky. Například:
    INSERT t1 SELECT * FROM holddups
    					

Vlastnosti

ID článku: 139444 - Poslední aktualizace: 23. dubna 2011 - Revize: 6.0
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft SQL Server 6.0 Standard Edition
  • Microsoft SQL Server 6.5 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Workgroup Edition
Klíčová slova: 
kbsqlsetup kbinfo kbusage kbmt KB139444 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:139444

Dejte nám zpětnou vazbu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com