违反主键 - 重复数据删除表

时间:2012-03-29 13:32:35

标签: sql-server-2008

我有一个包含1000万条记录的表,在一列上有非聚集索引键,我正在尝试重复删除该表。我尝试使用select的插入,其中使用左连接或不存在;但每次我收到违反密钥的错误。以下是我使用的查询;

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) 

这只会导致违反键错误。我尝试使用以下内容:

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 

我结束使用批量插入,因为日志文件变得太大但即使只有1000条记录,仍然会违反主键错误。

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

1 个答案:

答案 0 :(得分:1)

我认为distinct没有像您期望的那样工作,因为时间部分会略有不同。

另一种方法是使用group by并使用最早的dateadded删除任何重复项。

也许是这样的:

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

From Original
Group By Profile, Feed, Photo