Имя: Пароль:
1C
 
Попытка вставки неуникального значения в уникальный индекс:
,
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)
И  запросом ты не факт что найдешь дубли, сначала нужно индекс дропнуть.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший