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

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

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

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

谢谢。

【问题讨论】:

    标签: php sql ms-access insert pdo


    【解决方案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了
        猜你喜欢
        • 2023-03-16
        • 2011-04-30
        • 2011-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-06
        • 1970-01-01
        • 2019-11-16
        相关资源
        最近更新 更多