从Access获取最后插入的ID

3

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

在我的具体情况下,我正在使用PHP+PDO将行插入Access数据库,并希望在执行每个插入操作时知道最后一个主键值。

如果没有此功能,是否有任何替代方案?(不更改数据库)

谢谢。

4个回答

7

看起来Access 2000或更高版本支持@@IDENTITY属性。因此,在INSERT之后,您只需要选择其值:

select @@IDENTITY from myTable

请参阅MSDN链接:检索标识或自动编号值 简而言之: 微软Access 2000或更高版本支持@@IDENTITY属性,以检索插入后自动编号字段的值。使用RowUpdated事件,您可以确定是否发生了插入,检索最新的@@IDENTITY值,并将其放置在DataSet中本地表的标识列中。

1
FROM子句在这里完全没有意义。您只能找到数据库连接的最后一个值。而且引用的MSDN文章并不使用FROM子句:它只是SELECT @@IDENTITY - David-W-Fenton

3
正如其他人所说,SELECT @@IDENTITY适用于Jet 4和ACE。
Access 2010引入了一个新的考虑因素,这是因为新的ACE版本支持表级数据宏,这相当于触发器。因此,在一个表中插入可能会触发另一个表中的插入,因此@@IDENTITY可能是第二个表的值,而不是顶层表的值。据我所知,对于这种情况,没有与SQL Server的SCOPE_IDENTITY()等效的方法。
我在其他Access论坛上询问过,似乎没有人知道。如果您正在使用带有表级数据宏的ACCDB,则需要注意这一点。

1

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


1
尝试在插入后运行 "SELECT @@IDENTITY FROM MyTable"。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接