0

Interbase (私は 2007 を使用していますが、それが重要かどうかはわかりません) に、SQL Server の SCOPE_IDENTITY() に似た、新しく挿入されたレコードの ID を取得するコマンドはありますか?

4

1 に答える 1

2

いいえ、InterBase には ID 機能がありません。

その代わり、InterBase にあるのはジェネレーター機能です。ジェネレーターは ID に似ていますが、主キー列から論理的に分離されています。言い換えれば、ジェネレーターは保証された一意の値を提供しますが、その値をどうするかはあなた次第です。

その値を、単一のテーブルまたは複数のテーブルの主キー値として使用できます。しかし、実際に主キーの値を割り当てることは、自分で行う必要があります。

のような機能がないことに加えて、InterBase にはステートメントSCOPE_IDENTITYから値を返す機能がありません。INSERTそのため、生成された主キーの値をINSERTステートメントから取得できないだけでなく、トリガーによって設定された値など、他の値も取得できません。

回避策

これに対する 1 つの考えられる回避策は、事前に主キー値を生成することです。したがって、次のようなことができます (使用しているプログラミング言語がわからないため、この例では InterBase ストアド プロシージャ構文を使用しますが、どのプログラミング言語でも同じことができます)。

DECLARE VARIABLE ID INTEGER;
BEGIN
    ID = SELECT GEN_ID(MY_GENERATOR, 1) FROM RDB$DATABASE;
    INSERT INTO MY_TABLE (ID, DESCRIPTION) VALUES (:ID, "Foo");

RDB$DATABASEレコードが 1 つだけのシステム テーブルです。の値がわかればID、proc から返すことができます。

2 番目の回避策はSELECT、代替キーを使用してレコードを作成し、生成された ID をそのように読み取ることです。

于 2010-10-07T13:56:17.633 に答える