2012-03-29 6 views
1

У меня есть таблица с 10 миллионами записей с некластеризованным ключом индекса в одном столбце, и я пытаюсь дедуктировать таблицу. Я попробовал вставки с выбором, где либо использовать левое соединение, либо там, где оно не существует; но каждый раз я получаю ошибку с нарушением ключа. Вот запросы, которые я использовал;Нарушение первичного ключа - таблица дедуплирования

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 
+0

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

ответ

1

Я полагаю, что distinct не работает, как вы ожидаете здесь как раз часть будет немного отличаться.

Другой подход - использовать group by и взять ранние dateadded, чтобы удалить любые дубликаты.

Может быть что-то вроде этого:

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

From Original 
Group By Profile, Feed, Photo 
+0

Я думаю, что это может быть просто работа, потому что он работает сейчас и еще не остановился с сообщением об ошибке. Будет опубликован после завершения. благодаря – vbNewbie

Смежные вопросы