我的客户意外地从访问表中删除了大约500条记录,这些记录具有创建为“自动编号”的主ID字段。通过关闭自动编号列(更改回整数),我能够从备份中恢复丢失的500条记录,但现在当然无法重新启动自动编号...
有哪些可能的解决方案? ID字段用作其他表的链接,因此我不能只重新编号所有内容而不重新编号引用此数字的所有表(颈部疼痛,但可能)。
如果数据已经存在于表中,使用max(id)作为起点,是否有任何“技巧”可以重新启动自动编号?
答案 0 :(得分:4)
使用ID字段将newTable设置为AutoNumber(所有字段必须与原始表中的相同 - ID除外)。将所有数据从originalTable复制到newTable:
INSERT INTO newTable SELECT * FROM originalTable
填写数据后,删除originalTable并将newTable重命名为originalTable。
这样就可以保留自动编号中的所有“漏洞”,并且newTable已启用自动编号。
P.S。始终尝试将外键添加到您的ID。在这种情况下,即使删除了某些数据,您至少也会保持一致的状态。
答案 1 :(得分:1)
如果我可以添加给出的答案。
关于Access自动编号字段的一个鲜为人知的事实是,当您压缩和修复数据库时,它们上的计数器会被重置。
我也很确定如果你进行插入,它将使用提供的数字而不是自动编号计数器中的下一个数字,只要它是> (大于)由自动数字字段保存的内部计数器(这有意义吗?)
换句话说,您可以在一个全新的访问表中执行类似的操作,其中计数器应设置为1 ...
INSERT INTO myTable (myAutoNumber,myOtherField) VALUES (10000,'other data')
这里提到的其他解决方案更好,因为他们会更好地保证结果,所以我几乎是出于学术原因提到它。
赛斯
答案 2 :(得分:1)
理想的解决方案虽然现在已经太晚了,但我们已经将丢失的500条记录恢复到工作台中。然后在主表中添加追加查询。这将包括自动编号字段。
答案 3 :(得分:0)
同意,但可能需要添加ORDER BY以确保AutoNumber的顺序正确。否则,您的其他表将具有错误的ID关联。
INSERT INTO newTable SELECT * FROM originalTable ORDER BY ID
您还必须明确命名字段,而不是使用*
答案 4 :(得分:0)
您创建一个新字段并将其设为自动编号,然后删除ID字段并将新字段重命名为id