Al momento sei offline in attesa che la connessione Internet venga ristabilita

Come rimuovere righe duplicate da una tabella di SQL Server

IMPORTANTE: il presente articolo è stato tradotto tramite un software di traduzione automatica di Microsoft ed eventualmente revisionato dalla community Microsoft tramite la tecnologia CTF (Community Translation Framework) o da un traduttore professionista. Microsoft offre articoli tradotti manualmente e altri tradotti automaticamente e rivisti dalla community con l’obiettivo di consentire all'utente di accedere a tutti gli articoli della Knowledge Base nella propria lingua. Tuttavia, un articolo tradotto automaticamente, anche se rivisto dalla community, non sempre è perfetto. Potrebbe contenere errori di vocabolario, di sintassi o di grammatica. Microsoft declina ogni responsabilità per imprecisioni, errori o danni causati da una traduzione sbagliata o dal relativo utilizzo da parte dei clienti. Microsoft aggiorna frequentemente il software e gli strumenti di traduzione automatica per continuare a migliorare la qualità della traduzione.

Clicca qui per visualizzare la versione originale in inglese dell’articolo: 139444
Sommario
Tabelle di Microsoft SQL Server non devono mai contenere righe duplicate, chiavi primarie nornon univoco. Per ragioni di brevità, si farà riferimento a volte a primarykeys come "chiave" o "Chiave pubblica" in questo articolo, ma questo sarà sempre indicare "primarykey". Usata duplicati è una violazione di integrità di entità e deve essere bedisallowed in un sistema relazionale. SQL Server dispone di diversi meccanismi forenforcing integrità di entità, inclusi gli indici, vincoli UNIQUE, vincoli PRIMARY KEY e trigger.

Nonostante questo, chiavi primarie duplicate possono verificarsi in circostanze insolite e in tal caso devono essere eliminate. Possono verificarsi è se duplicatePKs esiste nei dati non relazionali di fuori di SQL Server e il isimported di dati, mentre il metodo è applicato non univocità PK. Un altro modo canoccur è un errore di progettazione del database, come l'applicazione non entityintegrity in ogni tabella.

Spesso usata duplicati vengono notati quando si tenta di creare un indice univoco, verrà interrotto se si trovano le chiavi duplicate. Questo messaggio è:
Indice univoco 1Creare MSG 1505, livello 16, stato interrotto su una chiave duplicata.
Se si utilizza SQL Server 2000 o SQL Server 2005, è che venga visualizzato il seguente messaggio di errore:
Msg 1505, livello 16, stato 1 CREATE UNIQUE INDEX terminato a causa di una chiave duplicata trovata per il nome di oggetto ' %. * ls' e il nome dell'indice ' %. * ls'. Il valore di chiave duplicato è %ls.
In questo articolo viene spiegato come individuare e rimuovere la tabella froma di chiavi primarie duplicate. Tuttavia, è necessario esaminare attentamente il processo di theduplicates devono verificarsi per evitare una ricorrenza è consentita.

Informazioni
Per questo esempio, utilizzeremo i seguenti con i valori di chiave duplicati. In questa tabella la chiave primaria è di due colonne (col1, col2). Abbiamo cannotcreate un indice univoco o vincolo di chiave primaria dopo due righe haveduplicate usata. Questa procedura viene illustrato come identificare e rimuovere 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')				
Il primo passo è identificare quali righe sono valori di chiave primari duplicati:
SELECT col1, col2, count(*)FROM t1GROUP BY col1, col2HAVING count(*) > 1				
Verrà restituito una riga per ogni set di valori di chiave duplicati nella tabella. L'ultima colonna in questo risultato è il numero di duplicati per il valore di chiave primaria theparticular.

Col1col2
112


Se sono presenti solo alcuni set di valori di chiave primaria duplicati, la migliore isto procedura eliminarle manualmente su base individuale. Ad esempio:
set rowcount 1delete from t1where col1=1 and col2=1				
Il valore di conteggio delle righe deve essere n-1 il numero di duplicati per un determinato valore di chiave. In questo esempio, esistono 2 duplicati in modo rowcount è impostato su 1. I valori / col2 col1 provengono dal precedente gruppo dal risultato della query. Se la query GROUP BY restituisce più righe, la query "set rowcount" sarà necessario eseguire una volta per ciascuna di queste righe. Ogni volta che viene eseguito, set rowcount per n-1 il numero di duplicati del particolare valore di chiave primaria.

Prima di eliminare le righe, è necessario verificare che isduplicate l'intera riga. Sebbene improbabile, è possibile che i valori di chiave primaria sono duplicati, ma non l'intera riga. Un esempio di questo sarebbe un withSocial tabella previdenza come chiave primaria, e con due diversi utenti (o righe) con lo stesso numero, ciascuno avente attributi univoci. In caso di sucha qualsiasi malfunzionamento causato alla chiave duplicata potrebbe essere anche dati univoci di causedvalid da inserire nella riga. Questi dati deve essere copiato in andpreserved di Studio e riconciliazione possibile prima di eliminare i dati.

Se esistono molti insiemi di valori di chiave primaria duplicati nella tabella, è forse troppo lunga per rimuoverli individualmente. In questo caso thefollowing procedura può essere utilizzato:
  1. Innanzitutto, eseguire query GROUP BY precedente per determinare quanti insiemi di valori di chiave primaria duplicati esistono e il numero di duplicati per ogni set.
  2. Selezionare i valori di chiave duplicati in una tabella di azienda. Ad esempio:
    SELECT col1, col2, col3=count(*)INTO holdkeyFROM t1GROUP BY col1, col2HAVING count(*) > 1					
  3. Selezionare le righe duplicate in una tabella di azienda, eliminazione dei duplicati nel processo. Ad esempio:
    SELECT DISTINCT t1.*INTO holddupsFROM t1, holdkeyWHERE t1.col1 = holdkey.col1AND t1.col2 = holdkey.col2					
  4. A questo punto, la tabella holddups deve avere chiavi univoche, tuttavia, questo non è il caso se t1 aveva chiavi duplicate, ma le righe univoche (come nell'esempio di SSN precedente). Verificare che sia univoco per ciascuna chiave di holddups e che non si dispone di chiavi duplicate, ma le righe univoche. Se in questo caso, è necessario interrompere la procedura e riconciliare che le righe che si desidera mantenere per un determinato valore di chiave duplicato. Ad esempio, la query:
    SELECT col1, col2, count(*)FROM holddupsGROUP BY col1, col2						
    deve restituire il numero di 1 per ogni riga. In caso affermativo, procedere al passaggio 5. In caso negativo, si dispone di chiavi duplicate, ma le righe univoche e necessario decidere quali righe di salvare. Ciò in genere comporterà l'eliminazione di una riga o la creazione di un nuovo valore di chiave univoco per questa riga. Accettare uno di questi due passaggi per ogni PK tali duplicati nella tabella holddups.
  5. Eliminare le righe duplicate dalla tabella originale. Ad esempio:
    DELETE t1FROM t1, holdkeyWHERE t1.col1 = holdkey.col1AND t1.col2 = holdkey.col2					
  6. Inserire le righe univoche nella tabella originale. Ad esempio:
    INSERT t1 SELECT * FROM holddups					
sql6 dedupe intg di entità

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 139444 - Ultima revisione: 05/21/2016 08:04:00 - Revisione: 5.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 KbMtit
Feedback
var varCustomerTracking = 1; var Route = "76500"; var Ctrl = ""; document.write("