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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top