Interbase 2007で新しく挿入されたレコードの身元を取得するコマンド
質問
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をそのように読み取ります。