代码之家  ›  专栏  ›  技术社区  ›  Ilya Kochetov

Informix:如何获取最后插入的记录的ID

  •  2
  • Ilya Kochetov  · 技术社区  · 18 年前

    在insert语句之后,获取序列列值的最有效方法是什么?也就是说,我正在寻找一种复制 @@IDENTITY 或 SCOPE_IDENTITY MS SQL的功能

    4 回复  |  直到 9 年前
        1
  •  10
  •   RET    18 年前

    最后一次串行插入的值存储在sqlca记录中,作为sqlerd数组中的第二个条目。布莱恩的答案对ESQL/C是正确的,但是你没有提到你使用的语言。

    如果编写的是存储过程,则可以通过以下方式找到该值:

    LET new_id = DBINFO('sqlca.sqlerrd1');
    

    也可以在 $sth->{ix_sqlerrd}[1] 如果使用DBI

    其他语言/接口也有变体,但我相信你会理解的。

        2
  •  1
  •   Brian Schmitt    18 年前

    我见过这个用过。

    if LOCAL_SQLCA^.sqlcode = 0 then
    / return serial */
      Result := LOCAL_SQLCA^.sqlerrd[1]
    else
    /* return error code */
      Result := -(Abs(LOCAL_SQLCA^.sqlcode));
    
        3
  •  -1
  •   Jody    18 年前

    我认为你在这里找的词不是“高效”。这更像是一个准确的问题。我不确定我能比SQL联机丛书更好地解释它,但一般来说,除非你真的知道自己在做什么,并且有使用@@identity的特定原因,否则使用scope_identity。最明显的原因是@@Identity不会返回由程序/sp/etc添加的最新记录的标识(如果表中附加了触发器)。此外,在大容量应用程序中可能会出现问题,其中两个事务同时发生,并且会发生以下情况…

    1. 您插入
    2. 其他用户的插入
    3. 将其他用户的身份返回给您
        4
  •  -5
  •   Joe R.    9 年前

    OP没有指定使用哪个版本的Informix,因此可能有不同的答案。