Hi to all,
 

 This is one approach (Maybe could be done one more efficient):
 

 /**
  * Firebird 2.5
  */
 

 -- 1.Create new fields
 ALTER TABLE some_table
   ADD id INTEGER DEFAULT 0 NOT NULL,
   ADD foo_dummy CHAR(1);
 

 -- 2.Create generador
 CREATE GENERATOR some_table_id_gen;
 

 -- 3.Create temp trigger
 SET TERM ^ ;
 CREATE TRIGGER some_table_temp_trgr FOR some_table
 ACTIVE BEFORE UPDATE POSITION 0
 AS 
 BEGIN 
   new.id = GEN_ID(some_table_id_gen, 1);
 END^
 SET TERM ; ^ 
 

 -- 4.Update foo_dummy field and so set the sequency
 --   into field ID
 UPDATE some_table SET foo_dummy = '1';
 

 -- 5.Drop temp trigger and foo_dummy
 DROP TRIGGER some_table_temp_trgr;
 ALTER TABLE some_table DROP foo_dummy;
 

 -- 6.Drop previous non ID primary key
 ALTER TABLE some_table DROP CONSTRAINT some_table_current_pk;
 

 -- 7.Create new PK
 ALTER TABLE some_table ADD CONSTRAINT some_table_pk PRIMARY KEY (ID);
 

 -- 9.Create new trigger for mantaining new PK
 SET TERM !! ;
 CREATE TRIGGER some_table_set_id FOR some_table
 BEFORE INSERT POSITION 0 AS
 BEGIN
   NEW.id = GEN_ID(some_table_id_gen, 1);
 END !!
 SET TERM ; !!
  
 /* */
 

 Best regards,
 

 Hernando.
 



Reply via email to