2008-10-29 76 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

相關問題