Ошибка SQL State: 23000 Native: 1505 - обновление решения проблемы #274551


#0 by Чес
При загрузке в монопольном режиме SQL ругается: Message: [Microsoft][ODBC SQL Server Driver][SQL Server]CREATE UNIQUE INDEX terminated because a duplicate key was found for index ID 2. Most significant primary key is ' 6OJ '. Решение описано тут: Вношу свои предложения: Arhitektor искал дублирования записи по ключу, заданному определенным индексом методом монопольного входа в 1С после исправления каждой ошибки. Есть более рациональный метод: Немного теории: SQL пытается создать ключ из нескольких полей, при анализе файла 1Cv7.DDS видим следующее #=============================================================================== #==TABLE no 4      : Ссылки документов # Name    |Descr                         |SQLTableNam|RecordLock T=1SCRDOC |Ссылки документов             |_1SCRDOC   |           #-----Fields------- # Name                  |Descr               |Type|Length|Precision F=ROW_ID                |Row ID              |I   |0     |0         F=MDID                  |Md ID of select     |I   |0     |0         F=PARENTVAL             |Parent Value        |C   |23    |0         F=CHILD_DATE_TIME_IDDOC |Child date          |C   |23    |0         F=CHILDID               |Child Doc ID        |C   |9     |0         F=FLAGS                 |Flags of refers     |Y   |0     |0         #----Indexes------ # Name                           |Descr         |Unique|Indexed fields                                              |Type       I=PK__1SCRDOC                    |ROW_ID        |1     |ROW_ID                                                      |1           I=CHILD                          |Child Referenc|1     |CHILDID,MDID,PARENTVAL                                      |0           I=PARENT                         |Parent Referen|1     |MDID,PARENTVAL,CHILD_DATE_TIME_IDDOC                        |0       Из части "Indexes" понятно, что дублирующиеся ключи SQL пытается создать из полей CHILDID,MDID,PARENTVAL Соотвественно, наша задача - сразу найти все записи в таблице, где эти поля дублируются для этого 1. Открываем Enterprise Manager 2. В списке баз находим нашу убитую, раскрываем 3. Щелкаем Tables, в списке таблиц находим _1SCRDOC 4. По ней правой кнопкой - Open Table - Query 5. И еще раз п.4, сейчас объясню зачем. В появившемся на экране конструкторе запросов пишем следующее: SELECT     CHILDID, MDID, PARENTVAL, COUNT(*) AS cnt FROM         _1SCRDOC GROUP BY MDID, PARENTVAL, CHILDID Нажимаем кнопку Run (с красным вопросительным знаком) Внизу появится таблица с результатами нашего запроса. Количество "дублей" может быть разное. Для каждого из них проделываем следующее: Во втором открытом конструкторе запросов пишем следующее: SELECT     *, MDID AS Expr1, CHILDID AS Expr2, PARENTVAL AS Expr3 FROM         _1SCRDOC 8ZYS - это то, что у вас находится в первом столбике первого запроса. Для каждого дубля копируете оттуда, вставляете в этот запрос и выполняете, пока дубли не закончатся :) После выполнения запроса внизу получаем результат. ищем записи, где поля CHILDID,MDID,PARENTVAL одинаковы (больше 2-х не встречал) Теперь одну из записей надо удалить. Какую - я, как и Архитектор, удалял с большим ID. не принципиально. В принципе все. Запускаете 1С в монопольном режиме - реиндексация - и Выходим! из предприятия, для того что бы сделать Выгрузку - загрузку данных. На этом все.
#2 by Чес
Фига себе :)
#3 by romix
А кинь Телепату в Книгу Знаний, а то здесь он не найдет..
#4 by Чес
ок
#5 by Чес
Корректировка: в после выполнения п.4 4. По ней правой кнопкой - Open Table - Query Выполняем следующий запрос: SELECT     _1SCRDOC.* FROM         (SELECT     CHILDID, MDID, PARENTVAL, COUNT(*) AS cnt, MAX(ROW_ID) AS rd                       FROM          _1SCRDOC                       GROUP BY MDID, PARENTVAL, CHILDID                       HAVING      (COUNT(*) > 1)) DERIVEDTBL INNER JOIN                      _1SCRDOC ON DERIVEDTBL.rd = _1SCRDOC.ROW_ID Результатом запроса будут все строки, которые нам надо удалить.
#6 by Чес
А чего в базу знаний не ложите? :)
Тэги: Админ
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С