Заполните числовое поле значениями автоинкремента в 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