質問

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

役に立ちましたか?

解決

いいえ、Interbaseには実際にはアイデンティティ機能がありません。

代わりに、Interbaseが持っているものは、ジェネレーター機能です。ジェネレーターはアイデンティティのようなものですが、主要な列から論理的に分離されています。言い換えれば、ジェネレーターはあなたに保証された一意の価値を与えますが、あなたがその価値で何をするかはあなた次第です。

その値は、単一のテーブルまたは複数のテーブルの主要なキー値として使用できます。しかし、実際に主要なキー値を割り当てることは、自分でやらなければならないことです。

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

回避策

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

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をそのように読み取ります。

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