从 Access 获取最后一个插入 ID

Posted

技术标签:

【中文标题】从 Access 获取最后一个插入 ID【英文标题】:Get last insert ID from Access 【发布时间】:2011-05-07 07:58:57 【问题描述】:

我熟悉 mysql 函数 LAST_INSERT_ID;是否有类似的功能可以通过 ODBC 对 MS Access 数据库执行相同的查询?

在我的具体情况下,我使用 php+PDO 将行插入到 Access 数据库中,并且想知道每次插入时的最后一个主键值。

如果此功能不可用,是否有其他选择? (不改变数据库)

谢谢。

【问题讨论】:

【参考方案1】:

Access 2000 或更高版本似乎支持@@IDENTITY 属性。因此,您只需要在 INSERT 之后选择它的值:

select @@IDENTITY from myTable

请查看 MSDN 链接:Retrieving Identity or Autonumber Values

简而言之:

[...] Microsoft Access 2000 或更高版本不支持@@IDENTITY 属性在INSERT 之后检索自动编号字段的值。使用 RowUpdated 事件,您可以确定是否发生了 INSERT,检索最新的 @@IDENTITY 值,并将其放在 DataSet 中本地表的标识列中。

【讨论】:

FROM 子句在这里完全没有意义。您只能找到数据库连接的最后一个值。并且引用的 MSDN 文章没有使用 FROM 子句:它只是 SELECT @@IDENTITY【参考方案2】:

正如其他人所说,SELECT @@IDENTITY 与 Jet 4 和 ACE 配合使用。

Access 2010 引入了一个新的考虑因素,这是因为新的 ACE 版本支持相当于触发器的表级数据宏。因此,一个表中的插入可能会触发另一个表中的插入,因此 @@IDENTITY 可能是第二个表的值,而不是***表的值。据我所知,在这种情况下,没有与 SQL Server 的 SCOPE_IDENTITY() 等效的方法。

我在其他 Access 论坛上询问过它,但似乎没有人知道。如果您将 ACCDB 与表级数据宏一起使用,则需要注意这一点。

【讨论】:

【参考方案3】:

我从未尝试使用 php 访问,但我想到了两个想法,第一个很简单。这就是在插入后从表中简单地选择 max(id),因为它是自动递增的,您将获得应该是插入值的最高值。其次,您可以尝试使用 odbc_cursor (http://au2.php.net/manual/en/function.odbc-cursor.php)。

【讨论】:

【参考方案4】:

尝试在插入后运行“SELECT @@IDENTITY FROM MyTable”。

【讨论】:

不,FROM 子句在这里完全没有意义。您只能找到数据库连接的最后一个值。 感谢您提供的信息。我已经很多很多年没用过 Access了

以上是关于从 Access 获取最后一个插入 ID的主要内容,如果未能解决你的问题,请参考以下文章

从 MS Access 数据库中检索最后插入的 ID

vbscript 获取Access中最后插入记录的ID

获取Access中最后插入的记录的ID

获取最后插入记录的 ID - Access DAO、ODBC、SQL Server 2008 身份字段

从 VB6 向 MS Access 插入订单

VBA + SQL Server - 获取插入的最后一个 ID