在 INSERT 语句之后获取 SERIAL 列的值的最有效方法是什么?即我正在寻找一种复制MS SQL@@IDENTITY
或功能的方法SCOPE_IDENTITY
Ilya Kochetov
问问题
11494 次
4 回答
11
最后一个 SERIAL 插入的值存储在 SQLCA 记录中,作为 sqlerrd 数组中的第二个条目。Brian 的回答对于 ESQL/C 是正确的,但是您没有提到您使用的是什么语言。
如果您正在编写存储过程,则可以找到该值:
LET new_id = DBINFO('sqlca.sqlerrd1');
$sth->{ix_sqlerrd}[1]
如果使用 DBI ,也可以在
有其他语言/界面的变体,但我相信你会明白的。
于 2008-10-31T02:11:11.540 回答
1
我见过这个用过。
if LOCAL_SQLCA^.sqlcode = 0 then
/* return serial */
Result := LOCAL_SQLCA^.sqlerrd[1]
else
/* return error code */
Result := -(Abs(LOCAL_SQLCA^.sqlcode));
于 2008-10-29T15:06:02.397 回答
-1
我不认为“高效”是您在这里寻找的词。这更多的是准确性问题。我不确定我能不能比 SQL 联机丛书更好地解释它,但一般来说,除非你真的知道你在做什么并且有使用 @@IDENTITY 的特定原因,否则请使用 SCOPE_IDENTITY。最明显的原因是@@IDENTITY 不会返回您的程序/sp/etc 添加的最新记录的标识,如果有一个触发器附加到表。此外,在大容量应用程序中可能存在两个事务同时发生的问题,并且会发生以下情况......
- 您的插入
- 其他用户的插入
- 将其他用户的身份返回给您
于 2008-10-29T22:27:15.503 回答
-5
OP 没有指定正在使用哪个版本的 Informix,因此可能会有不同的答案
于 2010-01-23T05:01:01.213 回答