bei fb2 hat sich mit Autoinc einiges getan, insbesondere durch returning
hier mal kurz zitiert von
http://www.rrze.uni-erlangen.de/hilf...bird-faq.shtml
Gruß
Holger
www.ibexpert.com
see you in paderborn
-------------------------------------------
Autoincrement Felder in Firebird
In Datenbank-Tabellen ist regelmäßig ein eindeutiger Wert in einer Spalte (Primary Key) gewünscht. In einigen Datenbanken gibt es dazu ein Felddatentyp AutoInc oder ähnlich. Firebird und der
SQL-Standard sehen zu Generatoren bzw Sequenzen vor.
Hier die nötigen Schritte in Firebird bis Version 1.5 (wird in neueren Versionen vmtl. auch funktionieren)
-- Generator mit Namen GEN_XYZ anlegen
CREATE GENERATOR GEN_XYZ;
-- Wert des Generators setzen
-- ACHTUNG: Nur zum Initialisieren!
SET GENERATOR GEN_XYZ TO 5;
-- Generator-Wert erhöhen um 1 und auslesen
select gen_id(GEN_XYZ,1) from RDB$DATABASE;
-- INSERT in Tabelle TBL_XYZ mit eindeutigem Generator-Wert in der Spalte "Id"
INSERT INTO TBL_XYZ ("Id") VALUES (gen_id(GEN_XYZ,1));
Der zweite Parameter der Funktion GEN_ID kann einen bel. Wert annehmen. Insbesondere kann man mit 0 einen Generator-Wert auslesen, ohne ihn zu verändern und mit -1 auch vermindern.
Ab Firebird 2.0 kann man das Problem noch eleganter lösen:
-- INSERT in Tabelle TBL_XYZ mit eindeutigem Generator-Wert in der Spalte "Id"
INSERT INTO TBL_XYZ ("Name") VALUES ('bla') RETURNING "Id";
Bei RETURNING können mehere Feldnamen der Tabelle angegeben werden, in die ein Datensatz eingefügt wurde. Die Felder müssen nicht über INSERT eingefügt werden, sondern können z.B. auch aus DEFAULT-Werten oder Ergebnissen von TRIGGERN stammen.
-------------------------------------------