|
![]() |
#1 |
Участник
|
выключать уникальный индекс ни в какой момент нельзя?
|
|
![]() |
#2 |
Участник
|
Потому что он точнее всего отражает суть того, что мне нужно было сделать
![]() |
|
![]() |
#3 |
Участник
|
Цитата:
тогда вместо update нужно использовать renamePrimaryKey. главное - внутри транзакции значения могут быть и неуникальными. Цитата:
![]() |
|
![]() |
#4 |
Участник
|
С точки зрения Аксапты поле, значения которого я перебивал, не является первичным ключом, кроме того, оно вообще-то уникально лишь в рамках комбинации значений других полей (впрочем, как и любой первичный ключ в таблице, данные которой хранятся в разрезе компаний).При условии, что update_recordset уйдет на СУБД одним запросом.Не таблица, а определенный набор записей - и то разве что в трешке, кроме того, при использовании моего способа можно обновлять данные множеством маленьких транзакций, получая после завершения каждой консистентный результат.
|
|
![]() |
#5 |
Участник
|
Цитата:
но: 1. set для большого числа записей будет работать очень-очень-очень медленно, да еще и с квадратичным временем O(n^2). 2. все равно нужно будет делать в одной транзакции - ведь важно, чтобы при работе алгоритма не появлялись новые записи с кодами, о которых алгоритм не знает ![]() может таки одна транзакция лучше? |
|
![]() |
#6 |
Участник
|
|
|
![]() |
#7 |
Участник
|
Цитата:
![]() 2. внутри есть цикл, в котором вызывается difference. Даже если сам difference работает O(log2(n)+1), то вся конструкция будет O(n*(log2(n)+1)). А скорее O(n^2) из-за intersection. Тут конечно считать нужно... Но intersection + difference внутри цикла сильно смущают. Особенно на больших множествах ![]() еще раз спасибо за клевую задачу. |
|
Теги |
законченный пример, уникальность |
|
![]() |
||||
Тема | Ответов | |||
Универсальный изменятель значений полей | 17 |
|