2012-03-29 5 views
1

Ich habe eine Tabelle mit 10 Millionen Datensätze mit einem Nonclustered-Index-Schlüssel in einer Spalte und ich versuche, die Tabelle zu deduplizieren. Ich habe die Inserts mit select ausprobiert, wo entweder ein linker Join verwendet wurde oder wo nicht; aber jedes Mal bekomme ich den Fehler mit Verletzung des Schlüssels. Hier sind die Abfragen, die ich verwendet habe;Verletzung des Primärschlüssels - Deduplizierung Tabelle

insert into temp(profile,feed,photo,dateadded) 
select distinct profile,feed,photo,dateadded from original as s 
where not exists(select 1 from temp as t where t.profile=s.profile) 

Dies erzeugt nur die Verletzung des Schlüsselfehlers. Ich habe versucht, mit dem folgenden:

insert into temp(profile,feed,photo,dateadded) 
select distinct profile,feed,photo,dateadded from original as s 
left outer join temp t on t.profile=s.profile 
where t.profile is null 

ich eine Batch-Insert ended verwenden, da die Protokolldatei zu groß wuchs aber immer noch die Verletzung von Primärschlüssel Fehler erhalten sogar auf nur 1000 Datensätze.

Destination Table :IX_Temp - profileUrl(ASC)--> unique key (non clustered) 
Source Table: IX_PURL - profileUrl(ASC) ---> index (non clustered, not unique 
+0

Migrate http://dba.stackexchange.com/? –

Antwort

1

Ich stelle mir vor, dass distinct nicht funktioniert, wie Sie hier erwarten würde, da der Zeitteil etwas anders sein wird.

Ein anderer Ansatz wäre, group by zu verwenden und den frühesten dateadded zu entfernen, um alle Duplikate zu entfernen.

Vielleicht so etwas wie:

Select Profile, 
     Feed, 
     Photo, 
     Min(DateAdded) as [DateAdded] 

From Original 
Group By Profile, Feed, Photo 
+0

Ich denke, das könnte nur funktionieren, denn es läuft jetzt und hat noch nicht mit Fehler msg gestoppt. Wird nach Abschluss zurückschreiben. Vielen Dank – vbNewbie

Verwandte Themen