Der default Wert wird nur genommen, wenn das Feld NULL ist ! 1. Fehler : wird es manuell besetzt, dann wird es nie NULL sein und der Trigger schlägt nicht zu. 2. Fehler : es wird von alleine auch nicht 1, weil DEFAULT eben nur greift bei NULL. Tja, so beißt sich normalerweise nur eine Katze in den Schwanz.
So legt man sich übrigens eine
IB/
FB-Datenbank inkl. "Autoincrement" in 2 Min. an :
SQL-Code:
/******************************************************************************/
/**** Generated by IBExpert 2005.09.25 24.01.2006 11:03:51 ****/
/******************************************************************************/
SET SQL DIALECT 3;
SET NAMES ISO8859_1;
CREATE DATABASE '
C:\db\TESTDB.FDB'
USER '
SYSDBA' PASSWORD '
masterkey'
PAGE_SIZE 4096
DEFAULT CHARACTER SET ISO8859_1;
/******************************************************************************/
/**** Generators ****/
/******************************************************************************/
CREATE GENERATOR SHOP_GEN_ID;
SET GENERATOR SHOP_GEN_ID
TO 2; <
-- Generatorwert steht hier bei 2 ! Warum ?
Es wurden 2 Datensätze angelegt und der
Trigger
hat die ID bereits 2 mal erhöht.
/******************************************************************************/
/**** Tables ****/
/******************************************************************************/
CREATE TABLE SHOP (
ID
INTEGER NOT NULL,
NR
INTEGER,
NAME
CHAR(30)
);
INSERT INTO SHOP (ID, NR, NAME)
VALUES (1, 1, '
name ');
INSERT INTO SHOP (ID, NR, NAME)
VALUES (2, 2, '
name2 ');
^ ^ wurde vom
Trigger besetzt
COMMIT WORK;
/******************************************************************************/
/**** Primary Keys ****/
/******************************************************************************/
ALTER TABLE SHOP
ADD CONSTRAINT PK_SHOP
PRIMARY KEY (ID);
/******************************************************************************/
/**** Triggers ****/
/******************************************************************************/
SET TERM ^ ;
/******************************************************************************/
/**** Triggers for tables ****/
/******************************************************************************/
/* Trigger: SHOP_BI0 */
CREATE TRIGGER SHOP_BI0
FOR SHOP
ACTIVE BEFORE
INSERT POSITION 0
as
begin
if (new.ID
is null)
then
new.ID = gen_id(SHOP_GEN_ID, 1);
end
^
SET TERM ; ^