1

我有一个带有自动主键、日期和其他数据的访问表。由于已删除记录,第一条记录从 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

4 回答 4

3

我会创建一个具有自动增量的新表。

然后选择所有现有数据到其中,按日期排序。这将导致从“1”重新创建 ID。

然后您可以删除原始表,并重命名新表。

假设没有外键 - 如果是这样,您也必须删除并重新创建它们。

于 2009-12-17T22:24:16.127 回答
3

从 MikeW 开始,您可以使用以下 SQL 命令将数据从旧表复制到新表:

INSERT 
    TestID, Date, Data
INTO
    NewTable
SELECT
    TestID, Date, Data
FROM
    OldTable;

如果您使用 AutoIncrement 字段,新的 TestID 将从 1 开始。

于 2009-12-17T22:37:23.990 回答
2

用作代理主键的自动编号不是数据,而是用于连接相关表中的记录的元数据。如果您需要控制该字段中的值,那么它就是数据,您不能使用自动编号,而必须滚动您自己的自动增量例程。您可能希望查看此线程作为起点,但在 Access 程序员聚集在网络上的任何地方都可以使用用于 Access 的代码。

于 2009-12-18T01:45:33.883 回答
0

我同意自动生成的 IDENTITY 值的值应该没有任何意义,即使对于编码器也是如此,但出于教育目的,以下是使用 ADO 重新设置 IDENTITY 的方法:

ACC2000:无法更改 UI 中的默认种子和增量值

请注意该文章已过时,因为它说“用户界面 (UI) 中没有可供您进行此更改的选项”。在更高版本的 Access 中,SQL DLL 可以在ANSI-92 查询模式下执行,例如:

ALTER TABLE MyTable ALTER TestID INTEGER IDENTITY (1, 1) NOT NULL;

于 2009-12-18T10:41:35.540 回答