我有一个带有自动主键,日期和其他数据的访问表。由于删除了记录,第一条记录从36开始。我想更改所有主键,使它们从1开始增加,按日期排序。这是最好的方法吗?
我想从此处更改表格:
| TestID | Date | Data |
| 36 | 12/02/09 | .54 |
| 37 | 12/04/09 | .52 |
对此:
| TestID | Date | Data |
| 1 | 12/02/09 | .54 |
| 2 | 12/04/09 | .52 |
编辑:感谢输入和回复者。我觉得有些人在我的问题上读得太多了,这是可以的,因为它仍然会增加我的学习和思考过程。我的问题的目的有两个:1)我让PK与我的数据的日期顺序匹配会更好,2)以便了解这样的事情是否可能以后使用。例如,如果我想在表格中添加一个新列,对测试进行编号,标记测试类型等等。我现在正在尝试立即学习很多,所以有时候我会有点困惑。我正在构建.NET应用程序并尝试学习SQL和数据库管理,有时会因为使用不同的RDMS以及与它们交互的方式而找到正确的信息而感到困惑。
答案 0 :(得分:3)
我会创建一个带有自动增量的新表。
然后选择所有现有数据,按日期排序。这将导致从“1”重新创建ID。
然后你可以删除原始表,并重命名新表。
假设没有外键 - 如果是这样的话,你必须放弃并重新创建它们。
答案 1 :(得分:3)
从MikeW开始,您可以使用以下SQL命令将数据从旧表复制到新表:
INSERT
TestID, Date, Data
INTO
NewTable
SELECT
TestID, Date, Data
FROM
OldTable;
如果您使用AutoIncrement字段,新的TestID将从1开始。
答案 2 :(得分:2)
用作代理主键的自动编号不是数据,而是用于连接相关表中的记录的元数据。如果您需要控制该字段中的值,那么它的数据,您不能使用自动编号,但必须滚动自己的自动增量例程。您可能希望以this thread为起点,但在Access中使用的代码随处可用Access程序员在网络上聚集。
答案 3 :(得分:0)
我同意自动生成的IDENTITY值的值应该没有意义,即使对于编码器也是如此,但出于教育目的,以下是使用ADO重新设置IDENTITY的方法:
ACC2000: Cannot Change Default Seed and Increment Value in UI
请注意该文章已过时,因为它说“用户界面(UI)中没有可供您进行此更改的选项。”在更高版本的Access中,可以在ANSI-92 Query Mode中执行SQL DLL,例如,像这样的东西:
ALTER TABLE MyTable ALTER TestID INTEGER IDENTITY (1, 1) NOT NULL;