Как увеличить существующее значение в столбце первичного ключа, не нарушая ограничений? - PullRequest
0 голосов
/ 31 мая 2018

В моей таблице MS Access myTable у меня есть столбец ID, который имеет тип integer и является первичным ключом для таблицы.

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

Update myTable 
Set ID = ID + [Offset]

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

В отличие от MS Access, SQL Server имеет встроенный механизм для решения этой проблемы, поэтому приведенное выше заявление будет работать.

Очевидно, что помимо простого удаления ключевого ограничения перед обновлением, решение будет заключаться в том, чтобы заставить Access обновить поле в порядке убывания, то есть начиная с самого высокого идентификатора и двигаясь вниз, таким образом избегая возможности дубликатов.,Однако следующая команда недопустима в MS Access.

Update myTable 
Set ID = ID + [Offset] 
Order By ID Desc

Примечание : эта команда будет работать в MySQL.

Есть ли способ добиться того, что я ищу, без снятия ограничения ключа?

1 Ответ

0 голосов
/ 31 мая 2018

Может быть, вы могли бы сделать это двумя обновлениями:

Update myTable Set ID = ID + [Offset] + [HighConstant];
Update myTable Set ID = ID - [HighConstant];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...