从Access获取最后一个插入ID

时间:2010-11-09 15:35:09

标签: php sql ms-access insert pdo

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

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

如果此功能不可用,还有其他选择吗? (不更改数据库)

谢谢。

4 个答案:

答案 0 :(得分:5)

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

select @@IDENTITY from myTable

请参阅MSDN链接:Retrieving Identity or Autonumber Values

简而言之:

  

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

答案 1 :(得分:2)

正如其他人所说,SELECT @@IDENTITY适用于Jet 4和ACE。

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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