我熟悉MySQL函数LAST_INSERT_ID;是否有类似的功能通过ODBC与MS Access数据库执行相同的查询?
在我的特定情况下,我使用PHP + PDO将行插入Access数据库,并希望知道每个插入执行时的最后一个主键值。
如果此功能不可用,还有其他选择吗? (不更改数据库)
谢谢。
答案 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”。