Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Удаление тысяч дублей (помогите новичку)  [new]
zoytsa
Member

Откуда:
Сообщений: 10
День добрый экспертам! :-)

Выскочила классическая ошибка:
"Попытка вставки неуникального значения в уникальный индекс".

автор
Попытка вставки неуникального значения в уникальный индекс:
Microsoft OLE DB Provider for SQL Server: Не удается вставить повторяющуюся строку ключа в объект "dbo._Document74_VT1007NG" с уникальным индексом "_Document74_VT1007_IntKeyIndNG". Повторяющееся значение ключа: (0x8f51bcaec575c8bc11e1abf6f1a51d21, 0x00000001).
HRESULT=80040E2F, SQLSrvr: Error state=1, Severity=E, native=2601, line=109


Лечу запросом:

автор
use test
go

SELECT top 1 *
into #tmp1
from [dbo].[_Document74_VT1007]
where _Document74_IDRRef = 0x924CBCAEC575C8BC11E248DF6B7C8DB7 and _KeyField=0x00000001

delete from [dbo].[_Document74_VT1007]
where _Document74_IDRRef = 0x924CBCAEC575C8BC11E248DF6B7C8DB7 and _KeyField=0x00000001
go

Insert into [dbo].[_Document74_VT1007]
Select * from #tmp1
Drop table #tmp1



Однако оценка аналогичных дублей показывает, что "тысячи их":
автор
SELECT COUNT(*) Counter, _Document74_IDRRef, _KeyField
fr om [dbo].[_Document74_VT1007]
GROUP BY _Document74_IDRRef, _KeyField
HAVING COUNT(*) > 1




Вопрос экспертам:
Как в цикле удалить все эти дубли, при этом делая проверку дублей по каждому полю?


Спасибо!!!
13 сен 14, 10:06    [16571405]     Ответить | Цитировать Сообщить модератору
 Re: Удаление тысяч дублей (помогите новичку)  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
with x as
(
 select row_number() over (partition by _Document74_IDRRef, _KeyField order by (select 1)) as rn from dbo._Document74_VT1007
)
delete from x where rn > 1;
13 сен 14, 10:29    [16571439]     Ответить | Цитировать Сообщить модератору
 Re: Удаление тысяч дублей (помогите новичку)  [new]
aleks2
Guest
zoytsa
День добрый экспертам! :-)

Выскочила классическая ошибка:
"Попытка вставки неуникального значения в уникальный индекс".

автор
Попытка вставки неуникального значения в уникальный индекс:
Microsoft OLE DB Provider for SQL Server: Не удается вставить повторяющуюся строку ключа в объект "dbo._Document74_VT1007NG" с уникальным индексом "_Document74_VT1007_IntKeyIndNG". Повторяющееся значение ключа: (0x8f51bcaec575c8bc11e1abf6f1a51d21, 0x00000001).
HRESULT=80040E2F, SQLSrvr: Error state=1, Severity=E, native=2601, line=109


Лечу запросом:

Спасибо!!!

Интересуюся, как это "вставку неуникального значения в уникальный индекс" можно вылечить запросом?
Бред. (причем не питт)
13 сен 14, 11:00    [16571471]     Ответить | Цитировать Сообщить модератору
 Re: Удаление тысяч дублей (помогите новичку)  [new]
zoytsa
Member

Откуда:
Сообщений: 10
invm, помогло! спасибо!!!

подскажи пожалуйста, в двух словах, что делает твой код?
вроде вижу выбирает первую строку (SELECT 1) - из каждой выборки с дублями (rn > 1)
но все в одну картинку не складывается
13 сен 14, 11:05    [16571474]     Ответить | Цитировать Сообщить модератору
 Re: Удаление тысяч дублей (помогите новичку)  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4262
zoytsa
invm, помогло! спасибо!!!

подскажи пожалуйста, в двух словах, что делает твой код?
вроде вижу выбирает первую строку (SELECT 1) - из каждой выборки с дублями (rn > 1)
но все в одну картинку не складывается

Код от invm нумерует все дубли на "раз, два и.т.д"
и все, что больше одного (rn > 1) удаляет.
13 сен 14, 12:45    [16571675]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить