在INSERT语句之后获取SERIAL列值的最有效方法是什么?即我正在寻找一种方法来复制MS SQL的@@IDENTITY
或SCOPE_IDENTITY
功能
答案 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添加的最新记录的标识。此外,在大量应用程序中可能存在问题,其中两个事务同时发生,并且会发生以下情况......
答案 3 :(得分:-5)
OP没有指定使用哪个版本的Informix,因此可以有不同的答案