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

时间:2008-10-29 14:22:10

标签: sql informix identity

在INSERT语句之后获取SERIAL列值的最有效方法是什么?即我正在寻找一种方法来复制MS SQL的@@IDENTITYSCOPE_IDENTITY功能

4 个答案:

答案 0 :(得分:10)

最后一个SERIAL插入的值存储在SQLCA记录中,作为sqlerrd数组中的第二个条目。 Brian的答案对于ESQL / C是正确的,但你没有提到你正在使用的语言。

如果您正在编写存储过程,则可以找到该值:

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

如果使用DBI

,也可以在$sth->{ix_sqlerrd}[1]中找到它

其他语言/接口有变种,但我相信你会明白这一点。

答案 1 :(得分:1)

我见过这个。

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

答案 2 :(得分:-1)

我不认为“有效”是你在这里寻找的词。这更像是一个准确性问题。我不确定我能比SQL Books Online更好地解释它,但一般来说,除非你真的知道自己在做什么并且有特定的理由使用@@ IDENTITY,否则请使用SCOPE_IDENTITY。最明显的原因是,如果表中附有触发器,@@ IDENTITY将不会返回程序/ sp / etc添加的最新记录的标识。此外,在大量应用程序中可能存在问题,其中两个事务同时发生,并且会发生以下情况......

  1. 您的插入
  2. 其他用户的插入
  3. 将其他用户的身份归还给您

答案 3 :(得分:-5)

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