在 Access 中将值插入主键字段

问题描述 投票:0回答:2

我有几个表需要包含一个“Null”值,这样如果另一个表链接到该特定记录,它基本上会得到“Nothing”。所有这些表都有不同数量的记录 - 如果我在末尾粘贴一些东西,试图找到“空”记录会变得混乱。所以我想执行一个

INSERT
查询来附加一个 ID 字段值为 0 或固定数字(如 9999999)的记录。我都试过了,Access 不允许我运行查询,因为违反关键。

事实是,我之前运行过相同的查询,并且运行良好。但后来我不得不删除所有数据并重新上传,现在我再次尝试,它不起作用。这是查询:

INSERT INTO [Reading] ([ReadingID], [EntryFK], [Reading], [NotTrueReading]) 
VALUES (9999999, 0, "", FALSE)

9999999 在哪里,我也试过 0。两次查询都因密钥违规而失败。

我知道这不是好的数据库设计。尽管如此,有什么办法可以使这项工作?我不确定为什么我现在不能做,而我以前可以做。

sql ms-access insert ms-access-2016
2个回答
1
投票

我不确定我是否完全理解这里的问题,但可能有几个原因导致它不起作用。最重要的是,对于查找表中的每条记录,任何类型的主键列都必须是唯一的。就像你上面提到的,0 是“未知”的一个很常见的值,所以我认为你是在正确的轨道上。

【阅读】中是否已经存在0或9999999?如果是这样,那可能是一种解释。当您之前擦除表时,您是完全删除并重新创建表还是只是截断它?根据表的设置方式,如果您只是删除该表中的所有数据并重新插入它而不是删除并重新创建它(即,如果我在一个表中有 100 条记录,然后将其截断(或删除这些记录),下次我将记录插入该表时,它仍将从 101 开始作为其默认 PK 值。

您可以做的一件事是删除并重新创建表并设置它,以便主键由数据库本身生成(如果尚未生成)(也称为“身份”类型的列)并确保它从0. 一旦你这样做了,你想要插入的第一条记录就是你的“未知”值(0),就像你让数据库本身处理 ReadingID 的地方一样:

INSERT INTO [Reading] ([EntryFK], [Reading], [NotTrueReading]) VALUES (0, "", FALSE)

然后插入其余数据。如果查找 [Reading] 的其他表在 FK 列中有空值,那么您始终可以在 coalesce(fk_ReadingID,0) = Reading.ReadingID.

上返回 [Reading]

希望能有所帮助。


0
投票

如果您指的是为目标表中的自动编号主键字段设置种子值,请尝试以下操作:

在 access 中创建一个虚拟表,其中的数字字段与目标表中的主键字段具有完全相同的名称,但不要使其成为虚拟表中的主键或自动数字字段。

打开虚拟表并输入种子值作为表中的第一条也是唯一一条记录。

打开查询并拉入虚拟表。单击“追加”使其成为追加查询,并在出现提示时选择目标表。

从虚拟表中拉取字段到查询中。 “附加到”字段应自动填充与虚拟表中的字段相同的名称。

运行查询并关闭它。目标表中的自动编号字段的值现在设置为您在虚拟表中输入的值,并将从那里递增。

注意:这仅在您的目标表中没有任何记录时才有效。

© www.soinside.com 2019 - 2024. All rights reserved.