Teď jste offline a čekáte, až se znova připojí internet.

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

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.

139444
Souhrn
Microsoft SQL Server tabulek by nikdy obsahovat duplicitní řádky, aniNejedineč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ýtzakázáno v relační systém. Má různé mechanismy pro SQL Servervynucení 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 dataimportovat, zatímco PK jedinečnosti nejsou prosazena. Jiným způsobem, mohoudojít prostřednictvím chybu návrhu databáze, například nemusí vynucení entityintegrity 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 1Vytvoř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 zTabulka. Však úzce zkontrolujte procesu, které jsou povolenydupliká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 nelzeVytvořte jedinečný index nebo omezení PRIMÁRNÍHO klíče, protože mají dva řádkyduplicitní PKs. Tento postup ukazuje, jak identifikovat a odstranitdupliká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 t1GROUP BY col1, col2HAVING 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 prokonkrétní hodnoty PK.

sloupci Sloupec1Sloupec2
112


Existuje pouze několik sad duplicitní hodnoty PK, je nejlepší postupChcete-li odstranit ručně na individuálním základě. Například:
set rowcount 1delete from t1where 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ý řádekDuplikujte. Zatímco je nepravděpodobné, je možné, že hodnoty PK jsou duplicitní,ještě není řádek jako celek. Příklad by tabulku sRodné čí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ýchpří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 azachová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ůžebý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 holdkeyFROM t1GROUP BY col1, col2HAVING count(*) > 1					
  3. Vyberte duplicitní řádky do tabulky hospodářství, vyloučení duplicity v procesu. Například:
    SELECT DISTINCT t1.*INTO holddupsFROM t1, holdkeyWHERE t1.col1 = holdkey.col1AND 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 holddupsGROUP 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 t1FROM t1, holdkeyWHERE t1.col1 = holdkey.col1AND t1.col2 = holdkey.col2					
  6. Vrácení jedinečné řádky do původní tabulky. Například:
    INSERT t1 SELECT * FROM holddups					
sql6 dedupe entity intg

Upozornění: Tento článek byl přeložen automaticky

Vlastnosti

ID článku: 139444 - Poslední kontrola: 04/23/2011 12:00:00 - Revize: 6.0

  • 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
  • kbsqlsetup kbinfo kbusage kbmt KB139444 KbMtcs
Váš názor