Ako odstrániť duplicitné riadky z tabuľky na serveri SQL

Preklady článku Preklady článku
ID článku: 139444 - Zobraziť produkty, ktorých sa tento článok týka.
Rozbaliť všetko | Zbaliť všetko

SUHRN

Microsoft SQL Server tabuľky by nikdy obsahujú duplicitné riadky, ani Nejedinečná primárne kľúče. Pre krátkosť, budeme niekedy označovať primárny kľúče ako "kľúč" alebo "PK" v tomto článku, ale to bude vždy označujú "Primárna kľúčom. Duplicitné PKs sú porušením subjekt integritu a musí byť povolená v relačnej systému. SQL Server má rôzne mechanizmy pre presadzovanie subjekt integritu, vrátane indexov, JEDINEČNÉ obmedzenia, PRIMÁRNY kľúč obmedzenia a spúšťače.

Napriek tomu za neobvyklých okolností môže nastať duplicitné primárne kľúče, a ak áno, musia byť odstránené. Jeden spôsob, ako môžu vznikať je ak duplicitné PKs existujú v-relačných údajov mimo SQL Server a údaje dováža, kým sa nevykoná PK jedinečnosť. Ďalším spôsobom, ako môžu vyskytujú sa prostredníctvom databázy konštrukčná chyba, napríklad nie presadzovanie subjekt integrita na každú tabuľku.

Často sú duplicitné PKs všimli pri pokuse vytvoriť jedinečný index, ktoré prerušíte, ak sa nachádzajú duplicitné kľúče. Toto hlásenie je:
Msg 1505, úroveň 16, štát 1 Vytvoriť jedinečný index prerušená na duplicitné kľúč.
Ak používate SQL Server 2000 alebo SQL Server 2005, môže sa zobraziť nasledujúce chybové hlásenie:
Msg 1505, úroveň 16, štát 1 vytvoriť JEDINEČNÝ INDEX ukončiť, pretože duplicitné kľúčové nenašiel sa názov objektu "%. * ls' a indexové názvom" %. * ls'. Duplicitné hodnoty kľúča je % ls.
Tento článok popisuje ako vyhľadať a odstrániť duplicitné primárne kľúče od Tabuľka. Však by mali pozorne preskúmať procesu, ktorý umožnil Duplikáty sa stalo, aby sa zabránilo opakovaniu.

DALSIE INFORMACIE

V tomto príklade použijeme nasledujúca tabuľka s duplicitné PK hodnoty. V tejto tabuľke je hlavný kľúč dva stĺpce (stĺpci 1, col2). Nemôžeme vytvoriť jedinečný index alebo hlavný kľúč obmedzenie, pretože majú dva riadky duplikovať PKs. Tento postup ilustruje, ako identifikovať a odstrániť 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')
				
Prvým krokom je identifikovať, ktoré riadky sa duplicitné hodnoty hlavného kľúča:
SELECT col1, col2, count(*)
FROM t1
GROUP BY col1, col2
HAVING count(*) > 1
				
To sa vráti jeden riadok pre každú množinu duplicitných PK hodnôt v tabuľke. Posledného stĺpca v tento výsledok je počet duplikáty na najmä PK hodnoty.

Zbaliť túto tabuľkuRozbaliť túto tabuľku
stĺpci 1col2
112


Ak existujú len niekoľko množiny duplicitných hodnôt PK, je najlepší postup Ak chcete odstrániť tieto ručne na individuálnom základe. Napríklad:
set rowcount 1
delete from t1
where col1=1 and col2=1
				
Rowcount hodnota by mala byť n-1 počet duplikáty pre danú hodnotu kľúča. V tomto príklade sú 2 duplikáty, takže rowcount je nastavený na 1. Stĺpci 1/col2 hodnoty sú prevzaté z vyššie uvedených ZOSKUPIŤ podľa výsledku dotazu. Ak ZOSKUPIŤ podľa dotaz vráti viac riadkov, "nastaviť rowcount" dotaz bude musieť spustiť raz pre každý z týchto riadkov. Zakaždým, keď je spustený, nastavte rowcount n-1 počet duplikáty najmä PK hodnoty.

Pred odstránením riadky, mali by ste overiť, že je celý riadok duplikovať. Keď nepravdepodobné, je možné, že PK hodnoty sú duplicitné, ešte nie je riadok ako celku. Príkladom tohto by tabuľky s Rodné číslo ako hlavný kľúč, a dvaja rôzni ľudia (alebo riadky) s rovnakým číslom, každý má jedinečné atribúty. V takýchto prípad akejkoľvek poruche spôsobenej duplicitné kľúč môže tiež spôsobil platné jedinečné údaje umiestniť v riadku. Tieto údaje by kopírovať a konzervovaná štúdia a možných odsúhlasenia pred na odstránenie údajov.

Ak existujú mnohé rôzne skupiny duplicitných PK hodnôt v tabuľke, môže byť príliš náročný odstráni jednotlivo. V tomto prípade postupu sa môže použiť:
  1. Po prvé, spustiť vyššie ZOSKUPIŤ podľa dotaz určiť, koľko množiny duplicitných hodnôt PK existujú a počet duplikáty pre každý súbor.
  2. Vyberte zdvojené kľúčové hodnoty do chovu tabuľky. Napríklad:
    SELECT col1, col2, col3=count(*)
    INTO holdkey
    FROM t1
    GROUP BY col1, col2
    HAVING count(*) > 1
    					
  3. Vyberte duplicitné riadky do chovu tabuľky, odstránenie duplicít v procese. Napríklad:
    SELECT DISTINCT t1.*
    INTO holddups
    FROM t1, holdkey
    WHERE t1.col1 = holdkey.col1
    AND t1.col2 = holdkey.col2
    					
  4. Na tomto mieste, holddups tabuľka by mala mať jedinečné PKs, však nebude prípad keby t1 duplicitné PKs ešte jedinečných riadkov (ako vo vyššie uvedenom príklade SSN). Overiť, že každý kľúč v holddups je jedinečný a že vás nemajú duplicitné kľúče ešte jedinečných riadkov. Ak tak, musí sa tu zastaví a zosúladiť ktoré riadky si prajete uchovať pre danú duplicitné kľúčové hodnotu. Napríklad, dotaz:
    SELECT col1, col2, count(*)
    FROM holddups
    GROUP BY col1, col2
    						
    by sa mali vrátiť počet 1 pre každý riadok. Ak áno, prejdite na krok 5 nižšie. Ak nie, máte duplicitné kľúče ešte jedinečných riadkov, a musieť rozhodnúť, ktoré riadky sa uložiť. Obvykle to vyvolá buď odstráňte riadok, alebo vytváranie nových jedinečnú kľúčovú hodnotu pre tento riadok. Mať jednu z týchto dvoch krokov pre každý takýto duplicitné PK v tabuľke holddups.
  5. Odstránenie duplicitných riadkov z pôvodnej tabuľky. Napríklad:
    DELETE t1
    FROM t1, holdkey
    WHERE t1.col1 = holdkey.col1
    AND t1.col2 = holdkey.col2
    					
  6. Jedinečných riadkov sa späť do pôvodnej tabuľky. Napríklad:
    INSERT t1 SELECT * FROM holddups
    					

Vlastnosti

ID článku: 139444 - Posledná kontrola: 10. októbra 2011 - Revízia: 2.0
Informácie v tomto článku sa týkajú nasledujúcich produktov:
  • 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 Express Edition
  • Microsoft SQL 2005 Server Enterprise
  • Microsoft SQL 2005 Server Workgroup
Kľúčové slová: 
kbsqlsetup kbinfo kbusage kbmt KB139444 KbMtsk
Strojovo preložené
DÔLEŽITÉ: Tento článok bol preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft, nie prekladateľom. Spoločnosť Microsoft ponúka články preložené prekladateľmi aj strojovo preložené články, vďaka čomu máte možnosť prístupu ku všetkým článkom databázy Knowledge Base vo svojom jazyku. Strojovo preložený článok však nie je vždy perfektný. Môže obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky, podobne ako cudzinec môže robiť chyby, keď rozpráva vašim jazykom. Spoločnosť Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené akýmkoľvek nepresným prekladom obsahu alebo jeho použitím zo strany zákazníkov. Spoločnosť Microsoft softvér na strojový preklad pravidelne aktualizuje.
Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem:139444

Odošlite odozvu

 

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