|
Помогите с SQL-запросом | ☑ | ||
---|---|---|---|---|
0
napagokc
06.03.17
✎
15:05
|
Добрый день.
При обмене между идентичными базами (основная - управленка) выскакивает ошибка: Microsoft SQL Server Native Client 11.0: Не удается вставить повторяющуюся строку ключа в объект "dbo._Reference73" с уникальным индексом "_Reference73HPK". Повторяющееся значение ключа: (0, 0xa8d2ac220bdb6ffb11e6b0a395a508a1). HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, state=1, Severity=E, native=2601, line=1 Я нашел, что такое _Reference73 - это справочник ("Виды использования рабочего времени") с предопределенными элементами. Ошибка возникала на предопределенном элементе, который в управленческой базе почему-то не был отмечен, как предопределенный. Тестирование и исправление в базе делал - ошибок нет. При пересчете итогов база в большинстве случаев крашится, но с какой-то попытки проходит. Ошибку это не исправляет. Признак предопределенности я элементу присвоил, программно привязав элемент к установленному в конфигураторе: Процедура СделатьПредопределеннымНаСервере() Об = Объект.ВидыИспользованияРабочегоВремени.ПолучитьОбъект(); Об.ИмяПредопределенныхДанных = "ПраздникиБезПовышеннойОплаты"; Попытка Об.Записать(); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецПроцедуры Но при ошибка при обмене не ушла. Полез в SQL Server Management Studio, нашел там нужную таблицу: http://prntscr.com/egn5x7 Что с ней делать дальше? Я вывел все поля, но не вижу там ключа из ошибки: select count(*), _IDRRef, _Version, _Marked, _PredefinedID, _Description, _Fld2999, _Fld3000, _Fld3001, _Fld3002, _Fld3003, _Fld3004, _Fld3005, _Fld3006RRef, _Fld3007, _Fld3008, _Fld1626 from _Reference73 group by _IDRRef, _Version, _Marked, _PredefinedID, _Description, _Fld2999, _Fld3000, _Fld3001, _Fld3002, _Fld3003, _Fld3004, _Fld3005, _Fld3006RRef, _Fld3007, _Fld3008, _Fld1626 Как посмотреть значения индексов, чтобы увидеть дублирование, и как их выправить? |
|||
1
omgwtf
06.03.17
✎
15:09
|
тестирование и исправление базы не находит ошибок?
|
|||
2
napagokc
06.03.17
✎
15:10
|
и да, я статью с сайта Гилева прочитал (http://www.gilev.ru/nonunique/), но там на примере документов всё рассматривается и либо мне не подходит, либо я что-то не понимаю...
|
|||
3
napagokc
06.03.17
✎
15:11
|
(1) ТиИ отрабатывает без замечаний вообще. Тестирование начато - Тестирование закончено.
|
|||
4
MrStomak
06.03.17
✎
15:22
|
0xa8d2ac220bdb6ffb11e6b0a395a508a1 - это значение поля _IDRRef, на котором происходит ошибка.
Происходит попытка записи неуникального гуида. Точно не видно этого номера в запросе студии? |
|||
5
napagokc
06.03.17
✎
15:25
|
(4) Точно. И глазами проверил, и поиском через Ctrl+F
http://prntscr.com/egnfy0 |
|||
6
napagokc
06.03.17
✎
15:28
|
(4) безбожно вру. Есть такой ключ, только в другом регистре, а поиск его не находит почему-то. Ок, и что с этим делать?
http://prntscr.com/egnhc6 |
|||
7
youalex
06.03.17
✎
15:28
|
профайлером еще можно посмотреть. какие запросы выполняются
|
|||
8
MrStomak
06.03.17
✎
15:30
|
(7) Да я тебе и так скажу - выполняется insert в dbo._Reference73
|
|||
9
napagokc
06.03.17
✎
15:35
|
так и что делать-то? Почему возникает ошибка, если элемент вставляется сам в себя?
Обмен проходит по правилам КД 2.1, поиск элементов идет по идентификатору, и если не находит идентификатор, то по наименованию. Наименования совпадают. Что не так? http://prntscr.com/egnkad |
|||
10
youalex
06.03.17
✎
15:38
|
(8) ну, вот это и можно будет увидеть, со всеми параметрами и предыдущими командами
зы. Тут недавно тема была, тоже по уникальности, там оказалось, что индекс порушился. |
|||
11
mexanik_96
06.03.17
✎
15:40
|
(0)индексы таким запросом не увидишь. нпк кластерный уникальный индекс. сходи на итс прсмотри как индексы строятся для справочников.вообще ребилд средствами скл по таблице сделай.
|
|||
12
Ёпрст
06.03.17
✎
15:40
|
(0) давно бы сделал truncate table _Reference73
и далее либо isert into select либо просто имортом, либо обычной xml выгрузкой заполнения справочника с другой базы. |
|||
13
napagokc
06.03.17
✎
15:41
|
может быть можно как-то изменить текущий индекс в базе-приемнике, изменить наименование элемента, провести обмен (чтобы создался элемент из базы-источника), а потом поиском дублей объединить эти элементы?
|
|||
14
napagokc
06.03.17
✎
15:42
|
(12) я в этом не понимаю от слова совсем, поэтому и прошу помощи. Можете подробнее рассказать?
|
|||
15
napagokc
06.03.17
✎
15:44
|
(12) загуглил, truncate - полностью очищает все строки в таблице. База рабочая, что с ней станет, если я удалю все строки? Ссылки на <Объект не найден>?
|
|||
16
mexanik_96
06.03.17
✎
15:45
|
(13)ребилд индексов по таблице сделать можешь в студии?
|
|||
17
Ёпрст
06.03.17
✎
15:47
|
(15) далее, перенесешь с другой базы целиком этот справочник. Усё.
|
|||
18
napagokc
06.03.17
✎
15:47
|
(16) Как это сделать?
Вот у Гилева есть пример с заменой индекса: =========== Замените значение _KeyField в одной из повторяющихся записей на правильное: update _Document140_VT1385 set _KeyField = keymax + 1 where _Document140_IDRRef = id1 and _LineNo1386 = lineno1 =========== Можно это как-то адаптировать для моей ситуации? |
|||
19
napagokc
06.03.17
✎
15:48
|
(17) А не возникнет проблем из-за того, что это предопределенные элементы?
|
|||
20
Ёпрст
06.03.17
✎
15:50
|
(19) нет
|
|||
21
Ёпрст
06.03.17
✎
15:50
|
у тебя же базы на рибе ?
|
|||
22
napagokc
06.03.17
✎
16:11
|
пока удалил строчку из базы через
delete from _Reference73 where _Description = 'Праздники без повышенной оплаты' Попробую сейчас провести обмен. Копию базы, разумеется, предварительно сделал. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |