Заполните числовое поле значениями автоинкремента в MS ACCESS

У меня есть таблица доступа со следующей структурой:

INO   IDATE      NAME ADDRESS CITY PHONE CONTACT & Other Fields.....
1430  01-Apr-15 
1431 01-Apr-15 
1432 01-Apr-15 
1435 01-Apr-15 
1436 01-Apr-15 
1440 01-Apr-15 
1441 01-Apr-15 
1448 01-Apr-15 
1450 01-Apr-15 
1455 02-Apr-15 
1456 02-Apr-15 
1459 02-Apr-15 

Поле "INO" установлено в тип данных "NUMBER". Размер поля: дважды проиндексировано = да

Это поле автоматически увеличивается программно, но после удаления некоторых бесполезных и отмененных записей из базы данных. Я нет. серия не в порядке. Я хочу заново сгенерировать числа и заполнить пробел удаленных номеров. то есть значение INO 1435 должно быть 1433, 1436–1434, 1440–1435 и т. д.

Выберите оператор, который я использую для фильтрации записей из таблицы:

SELECT *
FROM IDETAIL
WHERE TYPE=True AND INO>=1430 ORDER BY INO;

До 1430 записей в порядке, есть разрыв после 1430 и от 01-апреля-15. в таблице около 18 000 записей, поэтому нелегко вручную исправить записи. Как я могу исправить это с помощью SQL или любой другой команды.

PS: Связанная таблица или запись не производится. Мы просто хотим сохранить последовательность записей для целей бухгалтерского учета.

Так же, как мы используем функцию "делать пока". Начальная запись INo является правильной и известной. Все записи нумеруются в цикле, начиная с 1-й записи INo=1430, следующей записи INO = 1430+1, следующих 1430+2 до последней записи. Как реализовать то же самое в запросе UPDATE вместе с "WHERE TYPE=True".

3 ответа

Если из этой таблицы нет ссылок на таблицу, Вы можете использовать следующий запрос:-

UPDATE YourTable
SET INO = DCount('*', 'YourTable', 'INO <= ' & INO)

Надеюсь это поможет

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

Используя и улучшая отличный ответ от @Ankit Bajpai, вот что вам нужно:

UPDATE (SELECT * FROM IDETAIL WHERE TYPE=True AND INO>=1430 ORDER BY INO) 
SET INO = DCount('*', 'IDETAIL ', 'INO <=' & INO & ' AND INO >= 1430  AND Type = True') + 1429

Помните, что если INO проиндексирован и не содержит дубликатов, это может привести к ошибкам в наборах записей. Type=false

Другие вопросы по тегам