![]() |
Firebird : Tabelle erstellen mit AutoInc-Feld
Hallo zusammen,
ich erstelle mit folgenden Script eine Tabelle :
SQL-Code:
So wie muss ich jetzt den Insert-Befehl schreiben, damit das Feld ID mit dem AutoIncrementwert gefüllt wird ?
CREATE TABLE PRODUKTE (
ID INTEGER NOT NULL, PRODUCTID VARCHAR(100) NOT NULL, BEZEICHNUNG VARCHAR(255) NOT NULL); CREATE GENERATOR GEN_PRODUKTE_ID; SET TERM ^ ; create trigger produkte_bi for produkte active before insert position 0 as begin if (new.id is null) then new.id = gen_id(gen_produkte_id,1); end ^ SET TERM ; ^ SET TERM ^ ; create procedure sp_gen_produkte_id returns (id integer) as begin id = gen_id(gen_produkte_id, 1); suspend; end ^ SET TERM ; ^ |
Re: Firebird : Tabelle erstellen mit AutoInc-Feld
Hallo,
wozu dient denn die SP? Na, egal, so sollte es gehen:
SQL-Code:
INSERT INTO Produkte(ProductId, Bezeichnung) VALUES('12345','Ein Produkt')
|
Re: Firebird : Tabelle erstellen mit AutoInc-Feld
Danke, wunderbar hat funktioniert.
|
DP-Maintenance
Dieses Thema wurde von "Phoenix" von "Programmieren allgemein" nach "Datenbanken" verschoben.
Das war ne Datenbank-Frage |
Re: Firebird : Tabelle erstellen mit AutoInc-Feld
Du solltest im Trigger bedingungslos die ID aus dem Generator eintragen.
Warum? Es könnte sonst es zu Schlüsselverletzungen führen: Der Generator steht bei 3, aber User trägt selbst 3 ein. Beim nächsten Insert ohne dass der User eine Id angibt würde der Generator um eins erhöht und versucht eine weitere 3 einzufügen -> Kabumm Wie kriegst du die Id nach einem Insert? Bei einem Insert führst du das hier mit Query.Open aus (nicht ExecSql!):
SQL-Code:
In der "Ergebnismenge" findest du die neue ID in der ersten Spalte.
INSERT INTO Produkte
(ProductID ,Bezeichnung) VALUES (:ProductID ,:Bezeichnung) RETURNING Id |
Re: Firebird : Tabelle erstellen mit AutoInc-Feld
Das Dumme ist, dass ich diesen Trigger auch schon in einer Doku gesehen habe (ob das jetzt auf firebirdsql.org oder ibphoenix.com oder sonstwo war, weiß ich leider nicht mehr). Ich stimme Dir zu, wenn schon "Auto_inc", dann richtig.
|
Re: Firebird : Tabelle erstellen mit AutoInc-Feld
Zitat:
Erst die neue Returning-Clause erlaubt es. Zitat:
|
Re: Firebird : Tabelle erstellen mit AutoInc-Feld
Naja, zum Einen hatte ich diesen Begriff mit Absicht in Anführungszeichen gesetzt und zum Anderen bezog ich mich dabei auf den Titel dieses Threads :) .
Schönen Abend noch |
Re: Firebird : Tabelle erstellen mit AutoInc-Feld
Wie funktioniert denn ein richtiger AutoInc von der SQL-Syntax bei Firebird ?
|
Re: Firebird : Tabelle erstellen mit AutoInc-Feld
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz