2008-10-29 98 views

回答

10

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

如果你正在写一个存储过程,该值可以由此发现:

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

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

有其他语言/接口变种中发现,但我相信你会明白的。

1

我已经看到了这个使用。

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

这是哪种语言?是帕斯卡吗?否定的ABS有点奇怪;除非你正在建立一个连接(可惜的是,至少有一个肯定的错误),Informix中的所有错误编号都是负数。 – 2008-11-02 21:04:41

-1

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

  1. 你插入
  2. 其他用户插入
  3. 返回其他用户的身份,你
+0

您可能会注意到,问题是关于Informix,而不是MS SQL – 2008-10-30 19:39:44

-5

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

+3

这是不可靠的 - 其他人可能插入了自插入以来更新,更大的值。 – 2010-01-23 05:50:21

相关问题