Momentálne ste offline a čaká sa, kým sa znova pripojíte na internet

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

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
SUHRN
Microsoft SQL Server tabuľky by nikdy obsahujú duplicitné riadky, aniNejedinečná primárne kľúče. Pre krátkosť, budeme niekedy označovať primárnykľúče ako "kľúč" alebo "PK" v tomto článku, ale to bude vždy označujú "Primárnakľúčom. Duplicitné PKs sú porušením subjekt integritu a musí byťpovolená v relačnej systému. SQL Server má rôzne mechanizmy prepresadzovanie 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 údajedováža, kým sa nevykoná PK jedinečnosť. Ďalším spôsobom, ako môžuvyskytujú sa prostredníctvom databázy konštrukčná chyba, napríklad nie presadzovanie subjektintegrita 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 1Vytvoriť 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 odTabuľka. Však by mali pozorne preskúmať procesu, ktorý umožnilDupliká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ôžemevytvoriť jedinečný index alebo hlavný kľúč obmedzenie, pretože majú dva riadkyduplikovať 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 t1GROUP BY col1, col2HAVING 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 nanajmä PK hodnoty.

stĺpci 1col2
112


Ak existujú len niekoľko množiny duplicitných hodnôt PK, je najlepší postupAk chcete odstrániť tieto ručne na individuálnom základe. Napríklad:
set rowcount 1delete from t1where 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ý riadokduplikovať. Keď nepravdepodobné, je možné, že PK hodnoty sú duplicitné,ešte nie je riadok ako celku. Príkladom tohto by tabuľky sRodné číslo ako hlavný kľúč, a dvaja rôzni ľudia(alebo riadky) s rovnakým číslom, každý má jedinečné atribúty. V takýchtoprípad akejkoľvek poruche spôsobenej duplicitné kľúč môže tiež spôsobilplatné jedinečné údaje umiestniť v riadku. Tieto údaje by kopírovať akonzervovaná š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ôžebyť príliš náročný odstráni jednotlivo. V tomto prípadepostupu 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 holdkeyFROM t1GROUP BY col1, col2HAVING count(*) > 1					
  3. Vyberte duplicitné riadky do chovu tabuľky, odstránenie duplicít v procese. Napríklad:
    SELECT DISTINCT t1.*INTO holddupsFROM t1, holdkeyWHERE t1.col1 = holdkey.col1AND 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 holddupsGROUP 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 t1FROM t1, holdkeyWHERE t1.col1 = holdkey.col1AND t1.col2 = holdkey.col2					
  6. Jedinečných riadkov sa späť do pôvodnej tabuľky. Napríklad:
    INSERT t1 SELECT * FROM holddups					
sql6 dedupe subjekt intg

Upozornenie: Tento článok bol preložený automaticky.

Vlastnosti

ID článku: 139444 – Posledná kontrola: 10/10/2011 11:36:00 – Revízia: 2.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 Express Edition, Microsoft SQL 2005 Server Enterprise, Microsoft SQL 2005 Server Workgroup

  • kbsqlsetup kbinfo kbusage kbmt KB139444 KbMtsk
Pripomienky