![]() |
![]() |
![]() |
|
Ошибка SQL State: 23000 Native: 1505 - обновление решения проблемы ₽ |
☑ | ||
---|---|---|---|---|
0
Чес
25.05.07
✎
22:32
|
При загрузке в монопольном режиме SQL ругается:
SQL State: 23000 Native: 1505 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 '. Решение описано тут: http://www.forum.mista.ru/topic.php?kb=1&id=9962 Вношу свои предложения: 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 HAVING (COUNT(*) > 1) Нажимаем кнопку Run (с красным вопросительным знаком) Внизу появится таблица с результатами нашего запроса. Количество "дублей" может быть разное. Для каждого из них проделываем следующее: Во втором открытом конструкторе запросов пишем следующее: SELECT *, MDID AS Expr1, CHILDID AS Expr2, PARENTVAL AS Expr3 FROM _1SCRDOC WHERE (CHILDID LIKE '%8ZYS%') 8ZYS - это то, что у вас находится в первом столбике первого запроса. Для каждого дубля копируете оттуда, вставляете в этот запрос и выполняете, пока дубли не закончатся :) После выполнения запроса внизу получаем результат. ищем записи, где поля CHILDID,MDID,PARENTVAL одинаковы (больше 2-х не встречал) Теперь одну из записей надо удалить. Какую - я, как и Архитектор, удалял с большим ID. не принципиально. В принципе все. Запускаете 1С в монопольном режиме - реиндексация - и Выходим! из предприятия, для того что бы сделать Выгрузку - загрузку данных. На этом все. |
|||
2
Чес
25.05.07
✎
22:32
|
(1) Фига себе :)
|
|||
3
romix
модератор
25.05.07
✎
23:42
|
(3) А кинь Телепату в Книгу Знаний, а то здесь он не найдет..
|
|||
4
Чес
26.05.07
✎
10:44
|
(3) ок
|
|||
5
Чес
01.06.07
✎
11:53
|
Корректировка:
в после выполнения п.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
Чес
03.06.07
✎
15:44
|
А чего в базу знаний не ложите? :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |