質問

INSERTステートメントの後にSERIAL列の値を取得する最も効率的な方法は何ですか?つまりMS SQLの @@ IDENTITY または SCOPE_IDENTITY 機能を複製する方法を探しています

役に立ちましたか?

解決

最後のSERIAL挿入の値は、sqlerrd配列の2番目のエントリとしてSQLCAレコードに保存されます。ブライアンの答えはESQL / Cには正しいですが、使用している言語については言及していません。

ストアドプロシージャを記述している場合、値は次のように見つかります。

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

DBIを使用している場合は、 $ sth-> {ix_sqlerrd} [1] にもあります

他の言語/インターフェースのバリアントがありますが、きっとあなたはそのアイデアを得るでしょう。

他のヒント

これが使用されているのを見ました。

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

「効率的」だとは思わないここで探している言葉です。それは正確さの問題です。 SQL Books Onlineで説明できるよりも良い説明ができるかどうかはわかりませんが、一般的に、あなたが何をしているかを本当に理解していて、@@ IDENTITYを使用する特定の理由がない限り、SCOPE_IDENTITYを使用します。これの最も明白な理由は、トリガーがテーブルにアタッチされている場合、@@ IDENTITYがプログラム/ sp / etcによって追加された最新のレコードのIDを返さないことです。また、2つのトランザクションが同時に発生し、以下が発生する大量のアプリケーションで問題が発生する可能性があります...

  1. あなたの挿入
  2. 他のユーザーの挿入
  3. 他のユーザーの身元をあなたに返す

OPは使用されているInformixのバージョンを指定しなかったため、異なる回答が存在する可能性があります

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top