|
Попытка вставки неуникального значения в уникальный индекс: | ☑ | ||
---|---|---|---|---|
0
LeoKeyn
18.04.24
✎
10:54
|
Добрый день. Более сведущие коллеги, помогите, пожалуйста. Столкнулся с ошибкой:
В процессе обновления информационной базы произошла критическая ошибка по причине: Нарушено условие уникальности данных. Попытка вставки неуникального значения в уникальный индекс: Microsoft SQL Server Native Client 11.0: Выполнение инструкции CREATE UNIQUE INDEX прервано, поскольку обнаружен повторяющийся ключ для объекта с именем "dbo._DocumentJournal28036NG" и индекса с именем "_DocumentJournal28036_1NG". Повторяющееся значение ключа: (0, 0x000002aa, 0x818fc8d3a384789d11eb6239840abf1b). HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, state=1, Severity=10, native=1505, line=1 Решить через выгрузку в файловый вариант никак, т.к. база слишком большая. В SQL запросах я крайне слаб, если кто может помогите. Нашел вариант решения проблемы: удаление индекса DROP INDEX ['_Accum17789_ByPeriod_TRN] ON [dbo].['_Accum17789] поиск дублей select * from _Accum17789 Acc (NOLOCK) inner join ( select _Period _RecorderTRef _RecorderRRef _LineNo from _Accum17789 (NOLOCK) group by _Period _RecorderTRef _RecorderRRef _LineNo having count(*) > 1 ) doubles ON doubles._Period = Acc._Period doubles._RecorderTRef = Acc._RecorderTRef doubles._RecorderRRef = Acc._RecorderRRef doubles._LineNo = Acc._LineNo создание индекса CREATE UNIQUE CLUSTERED INDEX [Accum17789_ByPeriod_TRN] ON [dbo].[Accum17789] ( [_Period] ASC, [_RecorderTRef] ASC, [_RecorderRRef] ASC, [_LineNo] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] в теме Попытка вставки неуникального значения в уникальный индекс Но не могу переписать его под свою ошибку. Данный пример запросов для регистра, как я понял, а у меня проблема с журналом документов |
|||
1
Timon1405
18.04.24
✎
11:02
|
скорее всего в этом журнале при обновлении усекается состав данных по типам. сравните состав журнала до и после и перед применением обновлений дополните типами текущей конфы.
|
|||
2
LeoKeyn
18.04.24
✎
11:17
|
(1) Конфа стандартная и снимать с поддержки не хотелось бы
|
|||
3
Garykom
гуру
18.04.24
✎
11:27
|
(2) Так ошибка то в данных
Есть почти дубли, которые после обновления (реквизит походу снесли, который был в индексе) становятся полными дублями |
|||
4
LeoKeyn
18.04.24
✎
11:28
|
(3) судя по всему да, но как это исправить?
|
|||
5
Garykom
гуру
18.04.24
✎
11:29
|
Через ПолучитьСтруктуруХраненияБазыДанных() найди что у тебя DocumentJournal28036
|
|||
6
Garykom
гуру
18.04.24
✎
11:31
|
(5)+ В конфигураторе глянь какие реквизиты ведущие
И какой сносится после обновления Найди эти "почти дубли" в базе и что то сделай |
|||
7
Garykom
гуру
18.04.24
✎
11:32
|
(6)+ точнее графы журнала документов
|
|||
8
LeoKeyn
18.04.24
✎
11:40
|
(6) В основном не понятно что именно "Найди эти "почти дубли" в базе и что то сделай")))
|
|||
9
LeoKeyn
18.04.24
✎
11:54
|
Пытаюсь найти дубли запросом
select * from [_DocumentJournal28036] Acc (NOLOCK) inner join ( select [_DocumentTRef] [_DocumentRRef] [_Fld1570] from [_DocumentJournal28036] (NOLOCK) group by [_DocumentTRef] [_DocumentRRef] [_Fld1570] having count(*) > 1 ) doubles ON doubles._DocumentTRef = Acc._DocumentTRef doubles._DocumentRRef = Acc._DocumentRRef doubles._Fld1570 = Acc._Fld1570 но получаю ошибку Сообщение 102, уровень 15, состояние 1, строка 7 Неправильный синтаксис около конструкции "_Fld1570". |
|||
10
Garykom
гуру
18.04.24
✎
12:04
|
http://www.gilev.ru/nonunique/
2.2.1. «Рыба» скрипта для определения неуникальных записей с помощью SQL:
SELECT COUNT(*) Counter, <перечисление всех полей соответствующего индекса> from <имя таблицы> GROUP BY <перечисление всех полей соответствующего индекса> HAVING Counter > 1 |
|||
11
mikecool
18.04.24
✎
12:03
|
ощущение, что ИИ учится
|
|||
12
LeoKeyn
18.04.24
✎
12:17
|
(11) почему ИИ, просто не имел до этого дел с SQL)
|
|||
13
mikecool
18.04.24
✎
12:20
|
(12) а проблема к скл относится косвенно
|
|||
14
LeoKeyn
18.04.24
✎
12:22
|
(10) Пробовал, но либо что то делаю не правильно(что скорее всего), либо не знаю:
select count(*), _DocumentRRef from _DocumentJournal28036 group by _DocumentRRef having count(*) > 1 ничего не возвращает. Мои поля SELECT TOP (1000) [_DocumentTRef] ,[_DocumentRRef] ,[_Date_Time] ,[_Marked] ,[_Posted] ,[_Number] ,[_Fld28037RRef] ,[_Fld28038_TYPE] ,[_Fld28038_S] ,[_Fld28038_RTRef] ,[_Fld28038_RRRef] ,[_Fld28039] ,[_Fld28040RRef] ,[_Fld28041] ,[_Fld28042RRef] ,[_Fld28043_TYPE] ,[_Fld28043_RTRef] ,[_Fld28043_RRRef] ,[_Fld28044RRef] ,[_Fld42030] ,[_Fld42031] ,[_Fld42032RRef] ,[_Fld42033] ,[_Fld1570] FROM [_DocumentJournal28036] |
|||
15
LeoKeyn
18.04.24
✎
12:23
|
(13) Понимаю, но решений не через SQL не смог найти
|
|||
16
mikecool
18.04.24
✎
12:23
|
как можно поймать запросом то, что происходит в откатившейся транзакции?
|
|||
17
LeoKeyn
18.04.24
✎
12:27
|
(16) При ТИИ получаю эту же ошибку
|
|||
18
Garykom
гуру
18.04.24
✎
12:31
|
(14)
select count(*), _DocumentRRef
from _DocumentJournal28036 group by _DocumentRRef having count(*) > 1 причем тут _DocumentRRef ??? |
|||
19
Garykom
гуру
18.04.24
✎
12:32
|
(18)+ ты по графам журнала делай!
по тем которые в конфе после обновления остаются |
|||
20
LeoKeyn
18.04.24
✎
12:32
|
(18) Как я понял это поле уникального идентификатора, который у меня не уникален. Понял, видимо, не правильно)
|
|||
21
Garykom
гуру
18.04.24
✎
12:34
|
что непонятного в "<перечисление всех полей соответствующего индекса>" ?
|
|||
22
Garykom
гуру
18.04.24
✎
12:35
|
(21)+ логично что заведомо уникальные поля убрать
тебе же дубли надо найти |
|||
23
youalex
18.04.24
✎
13:15
|
(17) значит у тебя уже неуникальные поля в данных, а при обновлении оно просто проявляется.
В 1С посмотри что это за индекс, какие там поля, через (5) И запросом ты не факт что найдешь дубли, сначала нужно индекс дропнуть. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |