将值插入到 Access 中的主键字段

Inserting a value into a primary key field in Access

我有几个 table 需要包含一个 "Null" 值,这样如果另一个 table 链接到该特定记录,它基本上会得到 "Nothing" .所有这些 table 都有不同数量的记录 - 如果我在末尾粘贴一些东西,试图找到 "Null" 记录会变得很混乱。所以我想执行一个 INSERT 查询来附加一个 ID 字段值为 0 或固定数字(如 9999999)的记录。我都试过了,但 Access 不允许我 运行 查询因为键冲突。

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

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

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

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

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

0或9999999是否已经存在于[Reading]中?如果是这样,那可能是一种解释。当您之前擦除 table 时,您是完全删除并重新创建 table 还是只是截断它?根据 table 的设置方式,如果您简单地删除 table 中的所有数据并重新插入,某些数据库将 'remember' 它过去使用的所有键而是感谢删除并重新创建它(也就是说,如果我在 table 中有 100 条记录然后截断它(或删除这些记录),下次我将记录插入 table 时它会仍然以 101 作为其默认 PK 值开始。

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

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

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

希望对您有所帮助。