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 je přeložen pomocí softwaru na strojový překlad Microsoft. Nepřesný či chybný překlad lze opravit prostřednictvím technologie Community Translation Framework (CTF). Microsoft nabízí strojově přeložené, komunitou dodatečně upravované články, a články přeložené lidmi s cílem zajistit přístup ke všem článkům v naší znalostní bázi ve více jazycích. Strojově přeložené a dodatečně upravované články mohou obsahovat chyby ve slovníku, syntaxi a gramatice. Společnost Microsoft není odpovědná za jakékoliv nepřesnosti, chyby nebo škody způsobené nesprávným překladem obsahu nebo jeho použitím našimi zákazníky. Více o CTF naleznete na http://support.microsoft.com/gp/machine-translation-corrections/cs.

Projděte si také anglickou verzi článku: 139444
Souhrn
Tabulky Microsoft SQL Server nikdy by měl obsahovat duplicitní řádky, nornon Jedinečný primárního klíče. Pro stručnost bude někdy označovány primarykeys jako "klíč" nebo "PK" v tomto článku, ale to bude vždy označení "primarykey." Duplicitní PKs jsou porušení entity integrity a měli bedisallowed v relačním systému. SQL Server obsahuje různé mechanismy forenforcing integrita entit, včetně indexů, jedinečné omezení, omezení primární klíč a aktivační události.

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. Jeden způsob, jakým se může dojít, je-li duplicatePKs existují v-relační data mimo SQL Server a isimported dat během PK jedinečnosti není vymahatelné. Jiný způsob jejich canoccur je přes chyby návrhu databáze, například není vynucování entityintegrity pro každou tabulku.

Často jsou duplicitní PKs všimli při pokusu vytvořit jedinečný index, který bude přerušena, pokud jsou nalezeny duplicitní klíče. Tato zpráva je:
Msg 1505, úroveň 16, stát 1vytvořte jedinečný index přerušena na duplicitní klíč.
Pokud používáte SQL Server 2000 nebo SQL Server 2005, může se zobrazit následující chybová zpráva:
Msg 1505, úroveň 16, stavu 1 vytvořit JEDINEČNÝ INDEX byla ukončena, protože byl nalezen duplicitní klíč pro název objektu ' %. * ls' a název index ' %. * ls'. Duplicitní klíče hodnotu %ls.
Tento článek popisuje vyhledejte a odstraňte duplicitní primární klíče froma tabulky. Však by měla prozkoumat podrobně procesu, což povoleno theduplicates stát, aby se zabránilo opakování.

Další informace
V tomto příkladu používáme následující tabulka s duplicitními hodnotami PK. V této tabulce je primárním klíči dva sloupce (Sloupec1, Sloupec2). Jsme cannotcreate jedinečný index nebo omezení PRIMÁRNÍHO klíče od dvou řádků haveduplicate PKs. Tento postup ukazuje, jak identifikovat a odstranit theduplicates.
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				
Tento postup vrátí jeden řádek pro každou sadu duplicitních hodnot PK v tabulce. Poslední sloupec v tento výsledek je počet duplicitní hodnoty PK theparticular.

Sloupec1Sloupec2
112


Pokud existují duplicitní hodnoty PK pouze několik sad, isto nejlepší postup je odstranit ručně individuálně. Například:
set rowcount 1delete from t1where col1=1 and col2=1				
N-1 počet duplicitních položek pro danou hodnotu klíče by měla být hodnota rowcount. V tomto příkladu jsou 2 duplikáty, rowcount je nastavena na hodnotu 1. Sloupec1/Sloupec2 hodnoty jsou převzaty z výše uvedené skupiny ve výsledku dotazu. Pokud skupiny tak, že dotaz vrátí více řádků, bude nutné dotaz "nastavit rowcount" Spustit jednou pro každou z těchto řádků. Při každém spuštění, nastavte rowcount číslo duplikáty konkrétní hodnotu PK n-1.

Před odstraněním řádků, měli byste ověřit, že isduplicate celý řádek. Zatímco nepravděpodobné, je možné, že jsou duplicitní hodnoty PK ještě řádek jako celek není. Příkladem tohoto by byla withSocial tabulka číslo jako primární klíč a se stejným číslem s dvě různé osoby (nebo řádky), každý s jedinečné atributy. V případě sucha způsobila selhání jakékoli duplicitní klíč může být také causedvalid jedinečné údaje uváděné v řádku. Tato data by měla zkopírované, andpreserved pro studium a možné odsouhlasení před odstraněním dat.

Je-li odlišné sady duplicitních hodnot PK v tabulce, je možná příliš náročné odebrat názvy ručně. Thefollowing postup v tomto případě lze použít:
  1. Nejprve spusťte výše uvedené skupiny podle dotazu, a zjistěte kolik sady duplicitních hodnot PK existují a počet duplicitních položek 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í, odstranění duplicit v procesu. Například:
    SELECT DISTINCT t1.*INTO holddupsFROM t1, holdkeyWHERE t1.col1 = holdkey.col1AND t1.col2 = holdkey.col2					
  4. V tomto okamžiku holddups tabulky by měl mít jedinečný PKs, však to nebude případ Jestliže t1, že duplicitní PKs ještě jedinečné řádky (jako ve výše uvedeném příkladu SSN). Ověřte, že každý klíč v holddups je jedinečný a že nemáte duplicitní klíče, ale jedinečné řádky. Pokud tedy musí zastavit zde a odsouhlasit, které řádky chcete zachovat pro dané duplicitní hodnoty klíče. 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, máte duplicitní klíče, ale jedinečné řádky a nutné určit řádky, které chcete uložit. To bude obvykle za následek zrušení řádku nebo vytvoření nové jedinečné klíče hodnoty pro tento řádek. Proveďte jeden z následujících dvou kroků pro každé takové duplicitní PK v tabulce holddups.
  5. Odstranění duplicitních řádků z původní tabulky. Například:
    DELETE t1FROM t1, holdkeyWHERE t1.col1 = holdkey.col1AND t1.col2 = holdkey.col2					
  6. Jedinečné řádky vložte zpět do původní tabulky. Například:
    INSERT t1 SELECT * FROM holddups					
sql6 dedupe entity intg

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

Vlastnosti

ID článku: 139444 - Poslední kontrola: 05/21/2016 06:44:00 - Revize: 7.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
html> var varAutoFirePV = 1; var varClickTracking = 1; var varCustomerTracking = 1; var Route = "76500"; var Ctrl = ""; document.write(" dy>/html>