将访问表中的所有主键更改为新数字

时间:2009-12-17 22:16:38

标签: sql ms-access jet

我有一个带有自动主键,日期和其他数据的访问表。由于删除了记录,第一条记录从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以及与它们交互的方式而找到正确的信息而感到困惑。

4 个答案:

答案 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;