Befehl erhalten Identität neu eingefügten Datensatz in Interbase 2007
Frage
In Interbase (Ich verwende 2007, ich weiß nicht, ob es wichtig ist) gibt es einen Befehl, um die Identität eines neu eingefügten Datensatz, ähnlich wie SCOPE_IDENTITY () in SQL Server zu bekommen?
Lösung
Nein, Interbase nicht wirklich ein Identitätsmerkmal hat.
Was hat Interbase, stattdessen ist ein Generator-Funktion. Generatoren sind wie eine Art Identität, aber sie sind logisch aus der Primärschlüsselspalte getrennt. Ein Generator, mit anderen Worten, gebe Ihnen einen einzigartigen Wert garantiert, aber was Sie mit diesem Wert zu tun ist bis zu Ihnen.
Sie können diesen Wert als die Primärschlüsselwerten für eine einzelne Tabelle verwenden oder für mehrere Tabellen. Aber eigentlich den Primärschlüsselwert zuweisen ist etwas, was Sie selbst tun müssen.
Neben nicht eine Funktion wie SCOPE_IDENTITY
hat, Interbase hat keine Art von Merkmalswerten aus einer INSERT
Anweisung zurückzukehren. So können Sie nicht nur keine erzeugten Primärschlüsselwert zurück von einer INSERT
Anweisung bekommen, können Sie auch keine anderen Werte erhalten, wie durch einen Trigger eingestellten Wert.
Umgehungen
Eine mögliche Abhilfe hierfür ist den Primärschlüsselwert im Voraus zu erzeugen. So etwas wie die folgenden tun könnte (ich verwenden werde interbase für dieses Beispiel Prozedur Syntax gespeichert, da ich nicht weiß, was Sprache Programmieren Sie verwenden, aber Sie können in einer beliebigen Programmiersprache, die gleiche Sache tun):
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
ist eine Systemtabelle, die nur ein Datensatz hat. den Wert von ID
zu wissen, können Sie es aus der proc zurückkehren können.
Eine zweite Abhilfe ist, den Datensatz mit einem alternativen Schlüssel SELECT
und das erzeugte ID auf diese Weise gelesen werden.