从 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的主要内容,如果未能解决你的问题,请参考以下文章