Удаление тысячи дублей в SQL

1. zoytsa 13.09.14 09:53 Сейчас в теме
День добрый!

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


В процессе обновления информационной базы произошла критическая ошибка.
по причине:
Попытка вставки неуникального значения в уникальный индекс:
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

SEL ECT top 1 *
into #tmp1
fr om [dbo].[_Document74_VT1007]
where _Document74_IDRRef = 0x924CBCAEC575C8BC11E248DF6B7C8DB7 and _KeyField=0x00000001

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

Ins ert in to [dbo].[_Document74_VT1007]
Sel ect * fr om #tmp1
Dr op table #tmp1
Показать



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



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

Спасибо!
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. zoytsa 13.09.14 11:07 Сейчас в теме
Помогли на sql.ru


with x as
(
sel ect row_number() over (partition by _Document74_IDRRef, _KeyField order by (select 1)) as rn fr om dbo._Document74_VT1007
)
delete fr om x wh ere rn > 1;
3. МихаилМ 15.09.14 16:55 Сейчас в теме
в транзакции удалить все дубли . затем вставить уникальные
4. zoytsa 15.09.14 19:23 Сейчас в теме
(3) МихаилМ, как средствами 1С найти эти дубли? Это строки ТЧ чеков.
5. МихаилМ 16.09.14 10:58 Сейчас в теме
(4)

ВЫБРАТЬ
поля индекса
ИЗ
Документ.ТЧ

СГРУППИРОВАТЬ ПО
по полям индекса
ИМЕЮЩИЕ КОЛИЧЕСТВО(*) > 1
6. zoytsa 16.09.14 11:13 Сейчас в теме
(5) МихаилМ, а если ни один из реквизитов ТЧ не индексируется?
7. МихаилМ 16.09.14 16:49 Сейчас в теме
(6)

от того , что реквизиты не индексируются не значит, что нет индексов.

смотрите, из каких полей состоит индекс _Document74_VT1007_IntKeyInd
8. zoytsa 17.09.14 14:14 Сейчас в теме
(7) МихаилМ, окей, попробую )
9. Xershi 1500 17.09.14 15:11 Сейчас в теме
(4) zoytsa, может не совсем то, но по поводу дублей есть обработка Поиск и замена дублей + Универсальные Подбор И Обработка Объектов. Хотя может вам и не подойдет.
10. zoytsa 17.09.14 15:17 Сейчас в теме
(9) Xershi, не подойдет, тут история вроде такой:
в документе, когда его открываешь в 1С - 4 строки,
а когда открываешь в SQL - 8
и ругань по этому поводу начинается при реструктуризации таблицы
11. Sanario 27 30.03.16 09:29 Сейчас в теме
Вообщем-то сабж продолжается:

Ошибка при вызове метода контекста (Записать): Попытка вставки неуникального значения в уникальный индекс:
Microsoft SQL Server Native Client 10.0: Не удается вставить повторяющуюся строку ключа в объект "dbo._AccRgAT1594" с уникальным индексом "_AccRgA1594_ByPeriod_RTRRRRN". Повторяющееся значение ключа: (0xa6d8ae22629ba12c4e9be8d951817a38, янв 1 4014 12:00AM, 0x9a2210bf488534c211e39738cdca8ac1, <NULL>, <NULL>, <NULL>, <NULL>, 0x00000000000000000000000000000000, 0).
HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, state=1, Severity=E, native=2601, line=1

Парни, помогите побороть, а? Бух скоро кукушку вырежет
12. Sanario 27 30.03.16 09:31 Сейчас в теме
Насколько я понял - произошло смещение дат, а вот как исправить - я в душе не знаю :(
15. Xershi 1500 30.03.16 12:09 Сейчас в теме
(12) Sanario, создать новую БД в скуле и залить туда годный бэкап.
Смещение дат кажись исправить нельзя.
16. Sanario 27 30.03.16 13:54 Сейчас в теме
(15) Xershi, нет годного бэкапа, благодаря некоторым( Теперь вариант снести только дубли в этой таблице dbo._AccRgAT1594
17. Xershi 1500 30.03.16 14:14 Сейчас в теме
(16) Sanario, может достаточно перепровести документы?
18. Sanario 27 30.03.16 15:02 Сейчас в теме
(17) Xershi, пробовал - вылет с той ошибкой что выше писал
+ Обнаружил еще 2 таблицы:
AccRgAT3596
AccRgAT3595
19. Xershi 1500 30.03.16 15:05 Сейчас в теме
(18) Sanario, так там что за записи анализировали? Движения или сами документы?
Вариант перегрузить в чистую БД может стоит рассмотреть?
21. Sanario 27 31.03.16 17:09 Сейчас в теме
(19) Xershi, в чистую базу грузился - неполная загрузка и вылет базы из-за неуникальности индексов
22. Xershi 1500 31.03.16 17:11 Сейчас в теме
(21) Sanario, так движения не грузите их нужно пересоздать. Т.е. провести уже в чистой базе.
25. Sanario 27 31.03.16 17:16 Сейчас в теме
(22) Xershi, пересоздать движения каким образом? Ладно, чистую базу я подготовил к заливке. И файл можно залить, но без движений - это распровести все доки?
13. Sanario 27 30.03.16 09:43 Сейчас в теме
Танцы с бубном - бэкап, перевод в файловую, ТИИБ и обратно в SQL не помогли.
14. Sanario 27 30.03.16 09:45 Сейчас в теме
20. Sanario 27 30.03.16 19:49 Сейчас в теме
движения документов операция вручную (б и н у)
23. Xershi 1500 31.03.16 17:11 Сейчас в теме
Ну или найти написать запрос в скуле и почистить эти записи, натренировавшись на копии.
24. Xershi 1500 31.03.16 17:12 Сейчас в теме
Не понятно как у вас так вышло. Читал сегодня книжку по администрированию. Когда почистите выгрузка в файл, затем создаете в кластере чистую БД и туда потом заливайте бэкап файловый.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот