Выполнение инструкции create unique index прервано

Добрый день!

Занимаюсь разработкой конфигураций на основе платформы 1С: Предприятие. При разворачивании копии базы сформированной средствами 1С: Предприятие регулярно появлялась ошибка:

В процессе обновления информационной базы произошла критическая ошибка
по причине:
Попытка вставки неуникального значения в уникальный индекс:
Microsoft SQL Server Native Client 11.0: Выполнение инструкции CREATE UNIQUE INDEX прервано, поскольку обнаружен повторяющийся ключ для объекта с именем «dbo._AccRg2024NG» и индекса с именем «_AccRg2024_ByPeriod_TRNNG». Повторяющееся значение ключа: (сен 30 4013 12:00AM, 0x0000001c, 0x83fd001b78e2ed3011e342e2cb8d7e1c, 1).
HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, state=1, Severity=10, native=1505, line=1

Так как копии разворачивались только в целях внесения изменений в конфигурацию и тестирования, этой ошибке не предавали особого значения, пока не понадобилось добавить предопределенный счет. При обновлении конфигурации происходила реструктуризация регистра бухгалтерии и вываливалась данная не приглядная ошибка. Дальнейшее обновление прекращалось. Гугление данного вопроса результатов не дало. пришлось разбираться самим.

Выяснение имени таблицы 1С связанной с объектом определяется функцией ПолучитьСтруктуруХраненияБазыДанных, там же можно поглядеть и состав индексов.

Как оказалось данные индексы в таблице SQL «_AccRg2024» отсутствовали физически. При дальнейшем анализе данных уже средствами SQL выяснилось, что не уникальными были номера записей в разрезе Периода — [_Period], регистратора — [_RecorderRRef] и номер записи [_LineNo], из за чего и не происходила реструктуризация таблицы. Кто и как умудрился удалить эти индексы история умалчивает, данный факт восстановлению не подлежит.

Вылечилась данная ситуация следующим запросом:

USE [DB]
GO

CREATE TABLE #TempRecorder (_RecorderRRef BINARY(16))
GO

INSERT INTO #TempRecorder 
	SELECT T.[_RecorderRRef]
	FROM (SELECT COUNT(*) as _count , T1.[_Period]  ,T1.[_RecorderRRef] ,T1.[_LineNo]      
			FROM [dbo].[_AccRg2024] AS T1	 
			GROUP BY T1.[_Period] ,T1.[_RecorderRRef]  ,T1.[_LineNo]
			HAVING count(*) > 1 ) AS T
	
	--WHERE T.[_RecorderRRef] = 0xBA80000C29053BCD11E2FF4303EA5AA7

	GROUP BY T.[_RecorderRRef]

DECLARE @_Count numeric(10), @_Period datetime, @_RecorderRRef binary(16), @_LineNo numeric(9,0);

DECLARE @i int;
SET @i = 0;

DECLARE _Recorder_Cursor CURSOR FOR
SELECT * FROM #TempRecorder;

OPEN _Recorder_Cursor
FETCH NEXT FROM _Recorder_Cursor INTO @_RecorderRRef;

WHILE @@FETCH_STATUS = 0
   
	BEGIN
		DECLARE _Cursor CURSOR FOR
		SELECT [_Period], [_LineNo] FROM [dbo].[_AccRg2024]
		WHERE [_RecorderRRef] = @_RecorderRRef

		OPEN _Cursor

		SET @i=0;

		FETCH NEXT FROM _Cursor INTO @_Period, @_LineNo

		WHILE @@FETCH_STATUS = 0

			BEGIN
				SET @i = @i + 1 

				UPDATE [dbo].[_AccRg2024] SET [_LineNo] = @i
				WHERE CURRENT OF _Cursor

				FETCH NEXT FROM _Cursor INTO @_Period, @_LineNo

			END;

		CLOSE _Cursor;
		DEALLOCATE _Cursor;

	FETCH NEXT FROM _Recorder_Cursor INTO @_RecorderRRef;
	
	END

CLOSE _Recorder_Cursor;
DEALLOCATE _Recorder_Cursor;

GO

DROP TABLE #TempRecorder
GO

Изначально определяются неуникальные записи, выбираются регистраторы и в цикле происходит пере нумерация строк.

После этого, уже средствами 1С, выполнилось тестирование базы с режимом «Реструктуризация таблиц информационной базы», данная процедура пересоздала индексы в таблице, и дальнейшие манипуляции, при работе с метаданными конфигурации, стали происходить без каких либо ошибок.

Ошибка обновления — повтояющийся индекс

Автор kmvtut, 10 янв 2018, 13:11

0 Пользователей и 1 гость просматривают эту тему.

При обновлении 1с Бухгалтерия государственного учреждения (1.0.49.6) платформа 8.3.10.2561 на последнем шаге вываливает ошибку:

ЦитироватьВ процессе обновления информационной базы произошла критическая ошибка
по причине:
Ошибка при попытке вставки записи с неуникальным значением ссылки.
Microsoft SQL Server Native Client 10.0: Нарушение «PK___Chrc477__AC8ED0C45C1B1042» ограничения PRIMARY KEY. Не удается вставить повторяющийся ключ в объект «dbo._Chrc477NG». Повторяющееся значение ключа: (0x9589bcaec5b4902d11e7f5cca1e38930).
HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, state=1, Severity=E, native=2627, line=1

В базе такой таблицы «dbo._Chrc477NG»  — нет. Индекса такого тоже не нашел. Проведено полное тестирование и исправление. Ошибок не выявлено. Не могу залить обновление. Вываливает на этапе реструктуризации базы. Сервер MSSQL 2008 R2


Попробуйте на файловой обновить.


нужно проверить базу средствами MS SQL или сделать ТИИ из конфигуратора.

Цитата: kmvtut от 10 янв 2018, 13:11В базе такой таблицы «dbo._Chrc477NG»  — нет

вполне возможно, что создается внутри транзакции…

Спасибо за Сказать спасибо


выгрузил в файл. обновление прошло успешно. при попытке загрузить обратно получил ошибку:

ЦитироватьОшибка загрузки информационной базы. В информационную базу загружены не все данные
по причине:
Попытка вставки неуникального значения в уникальный индекс:
Microsoft SQL Server Native Client 10.0: Выполнение инструкции CREATE UNIQUE INDEX прервано, поскольку обнаружен повторяющийся ключ для объекта с именем «dbo._Chrc477» и индекса с именем «PK___Chrc477__AC8ED0C4089B1303». Повторяющееся значение ключа: (0x9a3500224d9b942b11e7f7ccfb801865).
HRESULT=80040E2F, HRESULT=80040E2F, SQLSrvr: SQLSTATE=42000, state=1, Severity=10, native=1750, line=1
SQLSrvr: SQLSTATE=23000, state=1, Severity=10, native=1505, line=1

то есть туже самую ошибку и пишет что не все данные были загружены.
и еще сообщение внизу: Таблица v8users содержит значения типа Дата, которые не могут быть записаны в MS SQL Server с нулевым смещением дат.

Вообщем проблема не решилась. как найти этот индекс? Тестирование и исправление прогонял на обеих базах — результат нулевой.



Цитата: kmvtut от 12 янв 2018, 23:41быть записаны в MS SQL Server с нулевым смещением дат.

смещение должно быть 2000.

загрузить базу в файловый вариант и сделать ТИИ, если будут исправлены ошибки, выгрузить в *.dt и загрузить на сервер.

Спасибо за Сказать спасибо


Вообщем провел массу всяких мероприятий. Вылезло в итоге вот что:

Цитировать
Планы видов характеристик. НастройкиПользователей. Проверка уникальности записей
   В таблице Chrc477 обнаружены неуникальные записи со значениями полей:
      ID = 477:9ECF00224D9B942B11E7FB48007A6BA0
   Неуникальность записей устранена
Планы видов характеристик. НастройкиПользователей. Проверка уникальности записей о предопределенных элементах
   В таблице Chrc477 обнаружены неуникальные записи со значениями полей:
      PredefinedID = 0x95918A25FA6AF66D4EA387540560F97C (ВводитьСУчетомУжеВведенных_ОтчетПоКассовымСменам)
         На основании «Отчета по кассовой смене» вводить документы с учетом уже введенных (477:8799bcaec5b4902d11e7d9a77225a816)
         На основании «Отчета по кассовой смене» вводить документы с учетом уже введенных (477:9ecf00224d9b942b11e7fb48007a6ba0) Установлена пометка удаления, снят признак предопределенности
   Неуникальность записей устранена
Планы видов характеристик. НастройкиПользователей. Проверка уникальности записей о предопределенных элементах
   В таблице Chrc477 обнаружены неуникальные записи со значениями полей:
      PredefinedID = 0x9DA619FCDB445D70436C1647EEAA2931 (ОперационнаяКасса)
         Операционная касса (477:8799bcaec5b4902d11e7d9a77225a817)
         Операционная касса (477:9ecf00224d9b942b11e7fb48007a6ba1) Установлена пометка удаления, снят признак предопределенности
   Неуникальность записей устранена

это в текстовой базе. можно ли грохнуть эти поля в базе рабочей на SQL и попробовать обновлять? или это критично? что это вообще..


Я думаю не страшно если ради обновления пропадет несколько настроек пользователей.



Рейтинг 4.86/7:

6 / 6 / 5

Регистрация: 27.04.2015

Сообщений: 567

Повтор записи в БД

12.12.2023, 10:46. Показов 1726. Ответов 10


Добрый день!
БП 3.0 КОРП.
При обновлении конфигурации возникает ошибка:
«Выполнение инструкции CREATE UNIQUE INDEX прервано, поскольку обнаружен повторяющийся ключ для объекта с именем «dbo._InfoRg20858» и индекса с именем «_InfoRg20858_3_NO». Повторяющееся значение ключа: (0, 0x01, 0xa267ac1f6b1d82a511ea49a3b7759ea7, 0x01, 0x00000000, 0x00000000000000000000000000000000).»

В базе данных нашел записи по указанной таблице, которые вроде даже повторяются.
Как я понимаю это ссылки на другие записи БД. Подскажите, как можно их просмотреть и правильно ли я диагностировал ошибку, потому что «_InfoRg20858_3_NO» это как я понимаю индекс.

Миниатюры

 



0



IT_Exp

Эксперт

34794 / 4073 / 2104

Регистрация: 17.06.2006

Сообщений: 32,602

Блог

12.12.2023, 10:46

Ответы с готовыми решениями:

Повтор записи
С помощью формы заносим данные в таблицу А. Потом с помощью "кнопочки" значение 1-ого поля перемещаем в таблицу В.
Но допустим, что…

Повтор записи в форме
Подскажите, как реализовать чтобы при вводе записи выходило предупреждающее сообщении о том, что данная запись уже сделана. Запись состоит…

Проверка на повтор при записи в файл
Уважаемые, нужна помощь!!Суть вот в чём, в файл записываются данные(символы, цифры и т.п) и надо сделать так, что бы не было повторов, …

10

Balalamb

6 / 6 / 5

Регистрация: 27.04.2015

Сообщений: 567

12.12.2023, 15:48

 [ТС]

удалил одну из задвоенных строк и при обновлении БД снова ругнулось, но на другую строку.
Как я понял проблема в столбце _Fld20860_RTRef со значением 0x0000B870, так как по нему еще много таких повторов
Как можно узнать, что это за значение 0x0000B870?

Добавлено через 3 часа 23 минуты
узнал как получить

T-SQL
1
CONVERT(char(36),CAST(_Fld20860_RTRef as uniqueidentifier))

однако 70B80000-0000-0000-0000-000000000000 мало похоже на ГУИД



0



Модератор

4030 / 2975 / 591

Регистрация: 10.03.2011

Сообщений: 11,703

Записей в блоге: 1

13.12.2023, 12:42

Balalamb, Это ссылка на тип

Добавлено через 53 секунды
Изменился состав составного типа регистра, что приводит к появлению дублей после конвертации



1



6 / 6 / 5

Регистрация: 27.04.2015

Сообщений: 567

13.12.2023, 12:48

 [ТС]

Dethmontt, а как можно это исправить, пока что мне приходит в голову только удалить дубли руками. А потом по заявкам пользователей восстанавливать им утраченные полномочия. Потому что это регистр Значения групп доступа.



0



Модератор

4030 / 2975 / 591

Регистрация: 10.03.2011

Сообщений: 11,703

Записей в блоге: 1

13.12.2023, 12:54

Сообщение от Balalamb

А потом по заявкам пользователей восстанавливать им утраченные полномочия.

как если там состав изменился)))

Добавлено через 33 секунды
Может кривыми ручками в этот регистр лазили?)))



0



6 / 6 / 5

Регистрация: 27.04.2015

Сообщений: 567

13.12.2023, 13:13

 [ТС]

Dethmontt, таки лазили! а мне разгребать)) но что характерно лазили очень давно, а ошибка всплыла недавно.
решил посмотреть что будет, удалил дубли, так теперь в регистре ГруппыЗначенийДоступа такая же свистопляска началась

Добавлено через 13 минут
Dethmontt, а имеется возможность зная это значение 70B80000-0000-0000-0000-000000000000 точно установить тип?



0



Модератор

4030 / 2975 / 591

Регистрация: 10.03.2011

Сообщений: 11,703

Записей в блоге: 1

13.12.2023, 14:50

Сообщение от Balalamb

а имеется возможность зная это значение 70B80000-0000-0000-0000-000000000000 точно установить тип?

Как-то можно, через DBScema, я не помню как.

Добавлено через 52 секунды
Balalamb, возьми гуид из соседней колонки RREF и посмотри в самой 1С что это

Сообщение от Balalamb

CONVERT(char(36),CAST(_Fld20860_RTRef as uniqueidentifier))



0



6 / 6 / 5

Регистрация: 27.04.2015

Сообщений: 567

13.12.2023, 15:04

 [ТС]

Dethmontt, решил попробовать иначе. Дубли эти у нас уже как я выяснил давно. Проблема возникает на этапе перестроить индексы. Я обнулил таблицу. Сейчас обновляю базу и если все будет хорошо перенесу в нее данные из соседней копии.
До следующего раза по идее должно помочь)



0



6 / 6 / 5

Регистрация: 27.04.2015

Сообщений: 567

14.12.2023, 09:28

 [ТС]

Dethmontt, все было очень прозаично. В определяемый тип действительно лазили, только обнова изменения затерла. Стоило вернуть то, что было сделано руками, и все стало хорошо без всяких танцев с бубнами



0



Модератор

4030 / 2975 / 591

Регистрация: 10.03.2011

Сообщений: 11,703

Записей в блоге: 1

15.12.2023, 01:01

Сообщение от Dethmontt

Изменился состав составного типа регистра, что приводит к появлению дублей после конвертации

Мне кажется это было понятно после этого сообщения, не?



0



6 / 6 / 5

Регистрация: 27.04.2015

Сообщений: 567

15.12.2023, 09:38

 [ТС]

Dethmontt, я не понял)



0



BasicMan

Эксперт

29316 / 5623 / 2384

Регистрация: 17.02.2009

Сообщений: 30,364

Блог

15.12.2023, 09:38

Помогаю со студенческими работами здесь

Повтор предыдущей(первой записи). Указатели и структуры
При вводе новой информации о детали первая записывается нормально, при вводе второй повторяется первая запись.
Нужно именно через…

UMI Исключить повтор из выборки последних записей на странице записи
Добрый день!
Недавно начал работать с UMI.
На сайте добавляются записи (новости), при открытии одиночной записи добавил в шаблон код,…

Как сделать повтор программы в ассемблере, после нажатия кнопки повтор в MessageBox
Как сделать так, чтобы повторял программу после нажатия кнопки "RETRY"

.data

msgCaption db…

повтор
как сделать так чтобы примеры не повторялись? например 8+2=10 и 2+8=10. мне надо программу составить в которой выводиться таблица сложения…

Повтор
У меня есть массив char ch ={A,B,C,A} как получить {A,B,C}

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

11

Новые блоги и статьи

Все статьи  

Все блоги / 

.NET Aspire и cloud-native приложения C#

stackOverflow 24.05.2025

. NET Aspire — новый продукт в линейке Microsoft, который вызвал настоящий ажиотаж среди разработчиков облачных приложений. Компания называет его «опинионированным, облачно-ориентированным стеком для. . .

Python и OpenCV для распознавания и обнаружения лиц

AI_Generated 24.05.2025

Python — язык, заслуживший любовь миллионов разработчиков своей простотой и выразительностью, а OpenCV (Open Source Computer Vision Library) — библиотека компьютерного зрения с открытым исходным. . .

Брокер NATS в C#

UnmanagedCoder 24.05.2025

NATS (Neural Autonomic Transport System) — это легковесная система обмена сообщениями, которая отлично вписывается в мир современных распределённых приложений. Если вы когда-нибудь пытались построить. . .

Оптимизация производительности Express.js бэкенда

Reangularity 23.05.2025

Express. js заслуженно остаётся одним из самых популярных инструментов для создания бэкенда, но даже он не застрахован от проблем с производительностью. Многие разработчики сталкиваются с ситуацией,. . .

Продвинутая обработка данных с LINQ в C#

stackOverflow 23.05.2025

LINQ (Language Integrated Query) — это фундаментальное изменение парадигмы работы с данными в C#. Простые запросы Where и Select знакомы любому разработчику, но настоящая мощь LINQ раскрывается в. . .

Инфраструктура PKI и сертификатов безопасности

Mr. Docker 23.05.2025

PKI (Public Key Infrastructure) — это невидимый фундамент цифрового доверия, без которого современный интернет просто рассыпался бы как карточный домик. За этой аббревиатурой скрывается целый. . .

Аутентификация OAuth в Python

py-thonny 22.05.2025

OAuth (Open Authorization) — это целый стандарт для делегированного доступа. Звучит занудно? Давайте проще: OAuth позволяет приложениям получать доступ к информации пользователя на сторонних сервисах. . .

Хеширование и соль паролей в веб-приложениях C#

stackOverflow 22.05.2025

Когда-то в начале своей карьеры я тоже грешил простейшими подходами к хранению паролей – MD5-хеширование казалось верхом защиты. Но технологии не стоят на месте, вычислительные мощьности растут, и. . .

Генераторы Python для эффективной обработки данных

AI_Generated 21.05.2025

В Python существует инструмент настолько мощный и в то же время недооценённый, что я часто сравниваю его с тайным оружием в арсенале программиста. Речь идёт о генераторах — одной из самых элегантных. . .

Чем заменить Swagger в .NET WebAPI

stackOverflow 21.05.2025

Если вы создавали Web API на . NET в последние несколько лет, то наверняка сталкивались с зелёным интерфейсом Swagger UI. Этот инструмент стал практически стандартом для документирования и. . .

Наверх

Перенос с файловой версии на MS SQL И опять: «Попытка вставки неуникального значения в уникальный индекс: Microsoft SQL Server Native Client 11.0: Выполнение инструкции CREATE UNIQUE INDEX прервано, поскольку обнаружен повторяющийся ключ для объекта с именем » В прошлый раз проблема была с таблицей бух.регистра «Налоговый» Пришлось грохнуть все движения, и потом загружать через XML. Теперь «повезло» таблице регистра сведений «СоответствияОбъектовИнформационныхБаз» Используется обмен УТ-Бухгалтерия, и содержимое этого регистра критически важно. Можно ли поступить так же? (т.е. грохнуть его, а затем загрузить через XML? — смущает то, что он сам используется для обмена данными)

Маленькая деталь: за полгода из файловой версии в SQL перенесено четыре базы, эта — пятая. Так вот — из пяти баз без проблем перенеслась только одна, в остальных — эта же проблема. С разными таблицами, но суть — одна. Причем в файловой версии эта ошибка не обнаруживается и никак себя не проявляет, а вылезает при переходе на SQL. Это только у меня такая статистика?

[Это только у меня такая статистика?] только у тебя все умеют делать ТиИ

Для слишком умных: ТиИ и Chkdbfl НЕ НАХОДЯТ эту ошибку.

Потому для файловой версии — это не ошибка и не проблема.

можно грохнуть индексы на таблице, загрузить базу и разобраться с дублями. включить индексы как было.

Это если в конфигураторе есть индексируемое поле. Например, со справочниками — это получается. С регистрами так не получится.

а ты все таки открой таблицу и посмотри ее индексы.

Регистр сведений говоришь. А там стоит галка создания таблицы для среза последних и индекс по его ресурсу?

регистр СоответствияОбъектовИнформационныхБаз кстати можно грохнуть спокойно. он потом сам опять заполнится. забей на индексы.

А вот над этим можно подумать, спасибо

Тэги: 1С 8

Комментарии доступны только авторизированным пользователям

Вам встретилось сообщение, содержащее строки:
Microsoft OLE DB Provider for SQL Server: CREATE UNIQUE INDEX terminated because a duplicate key was found for index ID
или
Cannot I_nsert duplicate key row in object
или
Попытка вставки неуникального значения в уникальный индекс.

Варианты решения:


1. В SQL Server managment studio физически уничтожаем сбойный индекс (в моем случае это был индекс по таблице итогов регистра бухгалтерии). В 1С распроводим сбойные документы. В режиме тестирования и исправления ставим галки реиндексация таблиц + пересчет итогов. 1С воссоздает индекс уже без ошибки. Проводим ранее сбоившие документы.


2. 1) С помощью Management Studio 2005 сгенерировала create-скрипт на создание индекса, который глючил, и сохранила в файлик.
2) Вручную убила косячный индекс из таблицы _AccumRgTn19455
3) Запустила запрос вида

Код SQL

 S_elect count(*), поля_индекса
FROM AccumRgTn19455
GROUP BY поля_индекса
HAVING count(*)>1

После того, как индекс был убит, у меня отобразилось 15 дублирующихся записей, хотя до выполнения п.2 запрос ничего не возвращал.
4) Просмотрела все записи и вручную почистила дубликаты. На самом деле, я ещё пользовалась обработкой «Структура отчёта», чтобы понять, с чем вообще имею дело. Оказалось, что в таблице _AccumRgTn19455 хранится регистр накопления «Выпуск продукции (налоговый учёт)». Я ещё поковырялась sql-запросами, выявила 15 неуникальных документов и после окончания всех действ проверила в 1С, что эти документы проводятся нормально, без ошибок. Просто так чистить таблицы наобум, конечно, не стоит: важно понимать, что чистится и чем это может обернуться.
5) Запустила запрос на создание индекса, который был сохранён в файле.
6) Перевела базу в однопользовательский режим и запустила dbcc checkdb — на этот раз ни одной ошибки не выдалось.
7) Перевела базу обратно в однопользовательский режим.
Всё… проблема побеждена. Ну ещё в 1С запустила «Тестирование и исправление», там тоже всё прошло нормально, перестало ругаться на неуникальный индекс.


3. Если неуникальность заключается в датах с нулевыми значениями, то проблема решается созданием базы с параметром смещения равным 2000.

1. Если проблема загрузкой базы данных, то:
1.1. Если Вы делаете загрузку (используйете dt-файл) в базу MS SQL Server, то при создании базы перед загрузкой укажите смещение дат — 2000.
Если уже база создана со смещением 0, то создайте новую с 2000.

1.2. Если есть возможность в файловом варианте работать с базой, то выполните Тестирование и Исправление, а также Конфигурация — Проверка конфигурации — Проверка логической целостности конфигурации + Поиск некорректных ссылок.

1.3. Если нет файлового варианта, попробуйте загрузить из DT в клиент-серверный вариант с DB2 (который менее требователен к уникальности), и затем выполнить Тестирование и Исправление, а также Конфигурация — Проверка конфигурации — Проверка логической целостности конфигурации + Поиск некорректных ссылок.

1.4. Для локализации проблемы можно определить данные объекта, загрузка которого не удалась. Для этого надо включить во время загрузки трассировку в утилите Profiler или включите запись в технологический журнал событий DBMSSQL и EXCP.

2. Если проблема неуникальности проявляется во время работы пользователей:

2.1. Найти с помощью метода пункта 1.4 проблемный запрос.

2.1.2. Иногда ошибка возникает во время исполнения запросов, например:

Данная ошибка возникает из-за того что в модуле регистра накопления «Рабочее время работников организаций» в процедуре «ЗарегистрироватьПерерасчеты» в запросе не стоит служебное слово «РАЗЛИЧНЫЕ».

Код 1C v 8.х

 Т.е. должно быть:
Запрос = Новый Запрос(
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Основные.ФизЛицо,
. . . . .

В последних выпущенных релизах ЗУП и УПП ошибка не возникает, т.к. там стоит «РАЗЛИЧНЫЕ».

2.2. После нахождения проблемного индекса из предыдущего пункта, необходимо найти неуникальную запись.
2.2.1. «Рыба» скрипта для определения неуникальных записей с помощью SQL:

Код SQL

 S_elect COUNT(*) Counter, <перечисление всех полей соответствующего индекса> from <имя таблицы>
GROUP BY <перечисление всех полей соответствующего индекса>
HAVING Counter > 1

2.2.2 Пример. Индекс в ошибке называется «_Document140_VT1385_IntKeyIndNG».
Перечень полей таблицы:
_Document140_IDRRef, _KeyField, _LineNo1386, _Fld1387, _Fld1388, _Fld1389, _Fld1390, _Fld1391RRef, _Fld1392RRef, _Fld1393_TYPE, _Fld1393_RTRef, _Fld1393_RRRef, _Fld1394,_Fld1395, _Fld1396RRef, _Fld1397, _Fld1398, _Fld1399RRef, _Fld22260_TYPE, _Fld22260_RTRef, _Fld22260_RRRef, _Fld22261_TYPE, _Fld22261_RTRef, _Fld22261_RRRef
Перед выполнением приведенной ниже процедуры сделайте резервную копию базы данных.
Выполните в MS SQL Server Query Analizer:

Код SQL

 S_elect count(*), _Document140_IDRRef, _KeyField
from _Document140_VT1385
group by _Document140_IDRRef, _KeyField
having count(*) > 1

С его помощью узнайте значения колонок _Document140_IDRRef, _KeyField, дублирующихся записей (id, key).

При помощи запроса:

Код SQL

 S_elect *
from _Document140_VT1385
where _Document140_IDRRef = id1 and _KeyField = key1 or _Document140_IDRRef = id2 and _KeyField = key2 or ...

посмотрите на значения других колонок дублирующихся записей.
Если обе записи имеют осмысленные значения и эти значения разные, то исправьте значение _KeyField на уникальное. Для этого определите максимальное занятое значение _KeyField (keymax):

Код SQL

 S_elect max(_KeyField)
from _Document140_VT1385
where _Document140_IDRRef = id1

Замените значение _KeyField в одной из повторяющихся записей на правильное:

Код SQL

 update _Document140_VT1385
set _KeyField = keymax + 1
where _Document140_IDRRef = id1 and _LineNo1386 = lineno1

Здесь _LineNo1386 = — дополнительное условие, которое позволяет выбрать одну из двух повторяющихся записей.

Если одна (или обе) из повторяющихся записей имеет очевидно неправильное значение, то ее нужно удалить:

Код SQL

 delete from _Document140_VT1385
where _Document140_IDRRef = id1 and _LineNo1386 = lineno1

Если повторяющиеся записи имеют одинаковые значения во всех колонках, то из них нужно оставить одну:

Код SQL

 S_elect distinct *
into #tmp1
from _Document140_VT1385
where _Document140_IDRRef = id1 and _KeyField = key1

delete from _Document140_VT1385
where _Document140_IDRRef = id1 and _KeyField = key1

I_nsert into _Document140_VT1385
S_elect #tmp1

D_rop table #tmp1

Описанную процедуру необходимо выполнить для каждой пары повторяющихся записей.

2.2.3. Второй пример:

Код SQL

 S_elect COUNT(*) AS Expr2, _IDRRef AS Expr1, _Description
FROM _Reference8_
GROUP BY _IDRRef, _Description
HAVING (COUNT(*) > 1)

2.3.4 Пример определения неуникальных записей с помощью запроса 1С:Предприятие:

Код 1C v 8.х

 ВЫБРАТЬ Справочник.Ссылка
ИЗ Справочник.Справочник КАК Справочник
СГРУППИРОВАТЬ ПО Справочник.Ссылка
ИМЕЮЩИЕ КОЛИЧЕСТВО(*) > 1

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Алфаза лекарство инструкция по применению
  • Ballu ap 110 инструкция
  • Картифлекс порошок для приготовления раствора для приема внутрь инструкция
  • Ингалятор релвар эллипта инструкция по применению
  • Оттобре лаб на русском инструкция