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

bea 发布于 2018-05-18 identity 最后更新 2018-05-18 23:29 107 浏览

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

已邀请:

msed

赞同来自:

我已经看到这用了。

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

qenim

赞同来自:

我不认为“高效”是你在这里寻找的词。这更多的是准确性问题。我不确定我可以比SQL Books Online更好地解释它,但通常情况下,除非您真的知道自己在做什么并且有使用@@ IDENTITY的特定原因,否则使用SCOPE_IDENTITY。最显而易见的原因是,@@ IDENTITY不会返回由程序/ sp/etc添加的最新记录的身份(如果有附加到该表的触发器)。此外,在大量应用程序中可能会出现两个事务同时发生并且会发生以下情况的问题...

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

ket

赞同来自:

最后一个SERIAL插入的值存储在SQLCA记录中,作为sqlerrd数组中的第二个条目。 Brian的答案对于ESQL/C是正确的,但是你没有提到你使用的是什么语言。 如果您正在编写存储过程,则可以这样找到该值:

LET new_id = DBINFO('sqlca.sqlerrd1');
如果使用DBI,也可以在$sth->{ix_sqlerrd}[1]中找到它 其他语言/界面也有变体,但我相信你会明白。

wodio

赞同来自:

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