I think what you propose will work fine, but you could just do it all yourself with some SQL. Arguably clearer, and no messing about with complex, possibly non-portable, triggers + auto-increments.
/* Initialize system */ BEGIN; CREATE TABLE id_allocator(id INTEGER); INSERT INTO id_allocator(0); COMMIT; /* Retrieve next id in sequence: */ BEGIN; SELECT id FROM id_allocator; /* This is the id to use */ UPDATE id_allocator SET id = id + 1; COMMIT; /* Can't use the id until the transaction successfully commits! */ --- Clark Christensen <[EMAIL PROTECTED]> wrote: > In my app (a perl/web-based on-line training system), I have a table of users > with an integer > primary key column, tech_id. The tech_ids are created by a foreign system, > and either imported > with other data, or inserted as-received by my app. > > In enhancing the app, I'm finding it desirable to insert self-registered > technician candidates > in this table with a tech_id that's outside the sequence of the current > tech_id, a temporary > tech ID. > > When the tech passes the on-line exam, the tech_id would be updated with the > permanent tech_id > from the foreign DB. I want to have SQLite generate these temporary IDs. > > I'm looking for suggestions on how to do this with SQLite3. > > As a test case, I came up with this scanario: > > create table t1 (a integer primary key autoincrement, b text); > create trigger deleteme after insert on t1 > begin > delete from t1 where a = new.a; > end; > insert into t1 values (null, 'a'); > > then get the last_insert_rowid > > which seems to work. The table itself never holds any data, but, by virtue > of 'autoincrement', > SQLite keeps track of the next value for column, "a". > > So, finally, my questions: What's wrong with this scheme? How bulletproof > is it? What would > work better? > > Thanks! > > -Clark > > > > __________________________________ Yahoo! Mail - PC Magazine Editors' Choice 2005 http://mail.yahoo.com